Сбой кадра данных

81
9

Как я могу свернуть свой кадр данных, когда многие наблюдения имеют несколько строк, но не более одного значения для каждой из нескольких разных переменных?


Вот что у меня есть:


id  title info                 var1     var2        var3
1 foo Some string here string 1
1 foo Some string here string 2
1 foo Some string here string 3
2 bar A different string string 4 string 5
2 bar A different string string 6
3 baz Something else string 7 string 8

Вот что я хочу:


id  title info                  var1        var2        var3
1 foo Some string here string 1 string 2 string 3
2 bar A different string string 4 string 5 string 6
3 baz Something else string 7 string 8

Я думаю, что у меня есть


ddply(merged, .(id, title, info), summarize, var1 = max(var1), var2 = max(var2), var3 = max(var3))

Но проблема в том, что существует много других переменных var1-var3, и они программно сгенерированы. В результате мне нужен способ вставить var1 = max(var1) и т.д. Программно, на основе списка имен переменных.

спросил(а) 2015-06-11T15:13:00+03:00 5 лет, 4 месяца назад
1
Решение
81

Многие возможные пути достижения этого, вот два


Определить некоторую вспомогательную функцию


Myfunc <- function(x) x[x != '']

Используя data.table

library(data.table)
setDT(df)[, lapply(.SD, Myfunc), by = list(id, title, info)]
# id title info var1 var2 var3
# 1: 1 foo Some string here string 1 string 2 string 3
# 2: 2 bar A different string string 4 string 5 string 6
# 3: 3 baz Something else string 7 NA string 8

Или аналогично dplyr


library(dplyr)
df %>%
group_by(id, title, info) %>%
summarise_each(funs(Myfunc))

# Source: local data table [3 x 6]
# Groups: id, title
#
# id title info var1 var2 var3
# 1 1 foo Some string here string 1 string 2 string 3
# 2 2 bar A different string string 4 string 5 string 6
# 3 3 baz Something else string 7 NA string 8

ответил(а) 2015-06-11T15:30:00+03:00 5 лет, 4 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема