R: получить имена столбцов, где rowSum равно значению - PullRequest
2 голосов
/ 26 марта 2020

У меня есть фрейм данных с несколькими столбцами, где его 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

Спасибо!

Ответы [ 2 ]

2 голосов
/ 26 марта 2020

Вы можете сделать:

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
1 голос
/ 26 марта 2020

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, .)
...