我有一个类似下面的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的列的名称。
tmb3ates1#
您可以使用max.col来子集化A的names。
max.col
A
names
names(A)[max.col(A)] #[1] "Red" "Blue" "Yellow" "Blue"
或者使用which和arr.ind。
which
arr.ind
names(A)[which(t(A == 1), TRUE)[,1]] #[1] "Red" "Blue" "Yellow" "Blue"
2nbm6dog2#
这里有一个有点复杂的R基选项
> names(A)[na.omit(c(t(col(A) * A^NA)))] [1] "Red" "Blue" "Yellow" "Blue"
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))]
3条答案
按热度按时间tmb3ates1#
您可以使用
max.col
来子集化A
的names
。或者使用
which
和arr.ind
。2nbm6dog2#
这里有一个有点复杂的R基选项
bhmjp9jg3#
GKi的max.col解决方案似乎最适合它有多短,但这里有一些其他的。它们各自生成向量c(1,2,3,2),然后由其下标名称(A)。