用于数据帧的每一行返回非零元素作为阵列中的R
问题描述:
我有A R数据帧像以下用于数据帧的每一行返回非零元素作为阵列中的R
client A B C D
asd awe 0 rty 0
wer 0 tyu wer 0
我所需的数据帧被以下
client A B C D recom
asd awe 0 rty 0 awe rty
wer 0 tyu wer 0 tyu wer
我希望所有非零元素是印在ccolumn 名字我使用下面的代码上面generare,但它似乎没有模具工作
df$recom= simplify2array(apply(df[2:5],1, function(x) paste(df[2:5]) [x!=0],collapse=" "))
答
尝试:
df$recom <- apply(df[, 2:5],1, function(x) paste(x[x!=0], collapse=" "))
client A B C D recom 1 asd awe 0 rty 0 awe rty 2 wer 0 tyu wer 0 tyu wer
答
或者更快的选择是paste
按行的元素,然后我们在提到删除0值
df$recom <- trimws(gsub("^0 +| +0|0 +0", "", do.call(paste, df1[-1])))
df$recom
#[1] "awe rty" "tyu wer"
评论,simplify2array
不需要与apply
调用作为ea中的元素ch行是paste
d一起得到一个vector
作为输出。事实上,在OP的解决方案中,不是使用匿名的'x'子集和后来的paste
,而是使用完整的数据集,即df[2:5]
。因此,它应该是注释中的一个(与另一个解决方案中发布的类似)
为什么你需要'simplify2array'? 'apply'输出是一个'vector'。 'df $ recom akrun
@akrun我看到我的答案没有什么不同。我没有仔细阅读你的评论。你为什么不添加你的答案,我会删除我的。 – G5W
@GSW没关系。我发现两个解决方案使用相同的而不承认,这就是为什么我评论。可能你没有看到它。没问题。感谢您的清除 – akrun