Как можно использовать векторы в столбцах данных в R? - PullRequest
0 голосов
/ 26 января 2019

Есть ли способ сделать что-то подобное в R, не имея 6 сэмплов, а только 2?

> df <- data.frame(w=c(1,2),x=c('asdf','yxcv'), y=c(1234, 5678), z=c(c(1,2,3,4), c(5,6,7,8)))
> df
  w    x    y z
1 1 asdf 1234 1
2 2 yxcv 5678 2
3 1 asdf 1234 3
4 2 yxcv 5678 4
5 1 asdf 1234 5
6 2 yxcv 5678 6
7 1 asdf 1234 7
8 2 yxcv 5678 8

Я хотел бы получить и использовать вектор, когда я делаю что-то вроде:

> df$z[1]
[1] 1 2 3 4
> sum(df$z[1])
[1] 10

Или получите следующее при выборе строки:

> df[1,]
  w    x    y  z
1 1 asdf 1234  c(1,2,3,4)

Этот пост делает нечто подобное, но не решает проблему использования векторов в качестве векторов.

1 Ответ

0 голосов
/ 26 января 2019

Вы можете следить за ответом по предоставленной вами ссылке.Просто отметьте, что lapply возвращает объект класса "list".Все, что вам нужно сделать, это создать фрейм данных без последнего столбца z и назначить список этому столбцу.

df <- data.frame(w=c(1,2),x=c('asdf','yxcv'), y=c(1234, 5678))
df$z <- list(c(1,2,3,4), c(5,6,7,8))

Теперь он работает как требуется.

df
#  w    x    y          z
#1 1 asdf 1234 1, 2, 3, 4
#2 2 yxcv 5678 5, 6, 7, 8

Извлечение,Примечание разница между [ и [[.

df$z[1]
#[[1]]
#[1] 1 2 3 4

df$z[[1]]
#[1] 1 2 3 4

и операциями над элементами списка.

sum(df$z[1])
#Error in sum(df$z[1]) : 'type' inválido (list) do argumento

sum(df$z[[1]])
#[1] 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...