如何在R的数据框列中使用向量?

时间:2019-01-26 19:28:23

标签: r dataframe vector indexing

有没有办法在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)

This帖子做了类似的事情,但没有解决将向量用作向量的问题。

1 个答案:

答案 0 :(得分:0)

您可以在提供的链接中关注答案。只需注意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

提取。注意the difference between [ and [[

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