Переименование значений строки с именем столбца, а затем агрегирование его в один столбец с помощью R - PullRequest
1 голос
/ 19 сентября 2019

У меня есть data.frame со значениями строк 0 и 1. Теперь мне нужно заменить 1 на имя столбца.Позже мне нужно объединить их в один столбец (поскольку в одной строке нет дублирования).

Фрейм данных выглядит следующим образом

var1   var2    var3 
0      1       0
1      0       0
0      0       1

Ожидаемый результат

var1   var2    var3 var
0      var2    0    var2
var1   0       0    var1
0      0       var3 var3

Ответы [ 3 ]

1 голос
/ 19 сентября 2019

Вы можете использовать комбинацию ifelse операторов, чтобы заменить 1 на имя столбца.

например,

df$var1 = ifelse(df$var1 == 1, "var1", 0)

, если вы хотите выполнить итерацию по несколькимстолбцы, вы, вероятно, можете сделать его более реплицируемым, используя lapply и список имен столбцов, а затем вместо "var1" в операторе ifelse используйте names(df[x])

1 голос
/ 19 сентября 2019

Решение Base R для произвольного фрейма данных и целевого значения:

df <- data.frame(
var1  = c(0,1,0),
var2 = c(1,0,0),
var3 = c(0,0,1))

# Task 1 
val <- 1 # value to subsitute
for (n in names(df)){
  df[[n]][df[[n]] == val] <- n
}

# Task 2
df$var <- apply(df, 2, function(x) x[grepl("var", x)])
1 голос
/ 19 сентября 2019

Вы должны попробовать gather() из пакета tidyr.

Gather создаст один столбец с именем переменной и один со значением.После этого вы можете отфильтровать только значение 1, а затем удалить столбец значений.

library(dplyr) # for piping
library(tidyr) # for gather

df %>%
gather(var,value) %>% # the arguments simply name the output columns
filter(value == 1) %>%
select(-value)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...