我正在尝试创建一个变量,其中包含每行不为零的所有列名称的列表。
数据示例:
set.seed(334)
DF <- matrix(sample(0:9,9),ncol=4,nrow=10)
DF <- as.data.frame.matrix(DF)
DF$id <- c("ty18","se78","first", "gh89", "sil12","seve","aga2", "second","anotherX", "CH560")
DF$count <- rowSums(DF[,2:5]>0)
DF
> V1 V2 V3 V4 id count
> 1 9 4 0 5 ty18 3
> 2 4 0 5 8 se78 3
> 3 0 5 8 2 first 4
> 4 5 8 2 6 gh89 4
> 5 8 2 6 7 sil12 4
> 6 2 6 7 3 seve 4
> 7 6 7 3 9 aga2 4
> 8 7 3 9 4 second 4
> 9 3 9 4 0 anotherX 3
> 10 9 4 0 5 CH560 3
Run Code Online (Sandbox Code Playgroud)
所需的输出将是一个新变量,对于第 1 行是“V1 V2 V4”,对于第 2 行是“V1 V3 V4”。我只想为此使用 V1-V4,而不考虑 id 或 count。
SO上的这个问题有帮助:对于每一行,返回最大值的列名
我试图对此进行测试,但它忽略了我的选择列,即使是最大值,所以这里的第一个测试只给出整行的最大值,这并不总是在我的数据中的 V1-V4 中。
DF$max <- colnames(DF)[apply(DF[,1:4],1,which.max)]
Run Code Online (Sandbox Code Playgroud)
尽管有错误,我想我需要做这样的事情,但我的 DF$list 尝试显然是错误的:
DF$list <- colnames(DF[,1:4]>0)
Run Code Online (Sandbox Code Playgroud)
我越来越
Error in `$<-.data.frame`(`*tmp*`, "list", value = c("V1", "V2", "V3", :
replacement has 4 rows, data has 10
Run Code Online (Sandbox Code Playgroud)
也许我试图将一个向量放入一个单元格中,这就是它不起作用的原因,但我不知道如何获取这些信息,然后将其变成一个字符串。我也不明白为什么选择性列的最大值不起作用。
这个怎么样
DF$nonzeros <- simplify2array(
apply(
DF[1:4], 1,
function(x) paste(names(DF[1:4])[x != 0], collapse = " ")
)
)
Run Code Online (Sandbox Code Playgroud)