我有一个有多列的数据帧,它的rowSums是1或者0.9。如果一列为0.5,那么另一列也必须为0.5。如果一列为0.3,那么其他两列必须具有相同的值。
df <- data.frame(A = c(0, 0, 0.3, 0.5, 0, 0.3, 0.5), B = c(0, 0, 0.3, 0.5, 0, 0.3, 0.5),
C = c(1, 1, 0.3, 0, 1, 0.3, 0))我最后需要的是另一个列(result),它具有值> 0的列名。
> df
A B C result
1 0.0 0.0 1.0 C
2 0.0 0.0 1.0 C
3 0.3 0.3 0.3 A-B-C
4 0.5 0.5 0.0 A-B
5 0.0 0.0 1.0 C
6 0.3 0.3 0.3 A-B-C
7 0.5 0.5 0.0 A-B谢谢!
发布于 2020-03-26 21:57:13
您可以执行以下操作:
df$result <- apply(df, 1, function(x) paste(names(df)[x > 0], collapse = "-"))
df
A B C result
1 0.0 0.0 1.0 C
2 0.0 0.0 1.0 C
3 0.3 0.3 0.3 A-B-C
4 0.5 0.5 0.0 A-B
5 0.0 0.0 1.0 C
6 0.3 0.3 0.3 A-B-C
7 0.5 0.5 0.0 A-B发布于 2020-03-26 21:56:29
library(tidyverse)
df %>%
mutate(id = row_number()) %>%
pivot_longer(-id, names_to = "cd", values_to = "vals") %>%
filter(vals > 0) %>%
group_by(id) %>%
summarise(new_val = paste(cd, collapse = "-")) %>%
ungroup() %>%
cbind(df, .)https://stackoverflow.com/questions/60868534
复制相似问题