提问人:lo edwin 提问时间:11/15/2023 最后编辑:ThomasIsCodinglo edwin 更新时间:11/15/2023 访问量:81
如何在 R 中创建向量列
How to create a vector column in R
问:
例如,我有一个数据框:
data <- data.frame(a=c(1,0,1),b=c(0,0,1),c=c(1,1,1),d=c(0,1,0))
如何添加像这样向量列(不是列表):
这个“组合”列将把整行的数据存储到一个向量中。
答:
1赞
Andrey Shabalin
11/15/2023
#1
以下是手动添加此类列的命令:
data = data.frame(a=c(1,0,1), b=c(0,0,1), c=c(1,1,1), d=c(0,1,0))
data$v = list(c(1,0,1,0), c(0,0,1,1), c(1,1,1,0))
data
# a b c d v
# 1 1 0 1 0 1, 0, 1, 0
# 2 0 0 1 1 0, 0, 1, 1
# 3 1 1 1 0 1, 1, 1, 0
或者在创建数据框时:
data = data.frame(
a = c(1, 0, 1),
b = c(0, 0, 1),
c = c(1, 1, 1),
d = c(0, 1, 0),
v = list(c(1,0,1,0), c(0,0,1,1), c(1,1,1,0))
更新:我已经更仔细地阅读了你的问题。以下是从数据框的其余部分填充的方法:data$v
data = data.frame(a=c(1,0,1),b=c(0,0,1),c=c(1,1,1),d=c(0,1,0))
vtmp = vector('list', nrow(data))
for( i in 1:nrow(data) )
vtmp[[i]] = as.vector(sapply(data, `[`, i));
data$v = vtmp;
data
# a b c d v
# 1 1 0 1 0 1, 0, 1, 0
# 2 0 0 1 1 0, 0, 1, 1
# 3 1 1 1 0 1, 1, 1, 0
1赞
M.Viking
11/15/2023
#2
编辑,用于创建数据帧列表:split()
data$combined <- split(data, 1:NROW(data))
你说“不是列表”,我们可以使用粘贴来做一个字符串:
library(dplyr)
data <- mutate(data, combined = paste(a,b,c,d))
# a b c d combined
# 1 1 0 1 0 1 0 1 0
# 2 0 0 1 1 0 0 1 1
# 3 1 1 1 0 1 1 1 0
1赞
Friede
11/15/2023
#3
中的一个选项:base
data <- data.frame(a=c(1,0,1),b=c(0,0,1),c=c(1,1,1),d=c(0,1,0))
data$combined <- as.array(
sapply(X = seq(nrow(data)),
FUN = \(i) unname(unlist(data[i, ])),
simplify = FALSE))
给
> class(data$combined) # not a list
[1] "array"
> data
a b c d combined
1 1 0 1 0 1, 0, 1, 0
2 0 0 1 1 0, 0, 1, 1
3 1 1 1 0 1, 1, 1, 0
评论
1赞
Andrey Shabalin
11/15/2023
干得好。我没有把它变成一句话
1赞
LMc
11/15/2023
#4
data$combined <- apply(data, 1, toString)
注意:是字符。data$combined
1赞
ThomasIsCoding
11/15/2023
#5
您可以简单地使用as.matrix
+ asplit
data$combined <- asplit(as.matrix(data), 1)
您将获得
> data
a b c d combined
1 1 0 1 0 1, 0, 1, 0
2 0 0 1 1 0, 0, 1, 1
3 1 1 1 0 1, 1, 1, 0
评论
0赞
Friede
11/15/2023
我最近注意到:如果矩阵技巧是一种选择,看看托马斯的答案(+1)。
评论