R语言 在一列中合并信息

kiz8lqtg  于 2023-05-11  发布在  其他
关注(0)|答案(3)|浏览(115)

我有一个类似下面的dataframe:

A <- data.frame(Red = c(1,0,0,0),
                Blue = c(0,1,0,1),
                Yellow = c(0,0,1,0))

我想把这些信息结合起来,以便得到这个专栏:

B <- data.frame(Colour = c("Red", "Blue", "Yellow", "Blue"))

也就是出现1的列的名称。

tmb3ates

tmb3ates1#

您可以使用max.col来子集化Anames

names(A)[max.col(A)]
#[1] "Red"    "Blue"   "Yellow" "Blue"

或者使用whicharr.ind

names(A)[which(t(A == 1), TRUE)[,1]]
#[1] "Red"    "Blue"   "Yellow" "Blue"
2nbm6dog

2nbm6dog2#

这里有一个有点复杂的R基选项

> names(A)[na.omit(c(t(col(A) * A^NA)))]
[1] "Red"    "Blue"   "Yellow" "Blue"
bhmjp9jg

bhmjp9jg3#

GKi的max.col解决方案似乎最适合它有多短,但这里有一些其他的。它们各自生成向量c(1,2,3,2),然后由其下标名称(A)。

names(A)[as.matrix(A) %*% seq_along(A)]

names(A)[apply(A == 1, 1, which)]

names(A)[apply(A, 1, which.max)]

names(A)[rowSums(A * col(A))]

相关问题