![](/img/trans.png)
[英]Creating a Vector from a dataframe that discriminates values based on another column in r
[英]Creating a column in a dataframe with values from another dataframe in R
我有一个具有以下结构的数据框:
V1 V2 V3 V4 V5 V6 V7 V8
A B A B B A B B
它只有一行,每列有一个字母。 我想将这些字母两个两个地插入另一个数据框中,如下所示:
V1 V2 V3
X AB F
Y AB G
Z BA H
W BB I
我应该如何进行? 也许将第一个数据帧变成向量?
提前致谢!
我不知道V1
和V3
是从哪里来的,但是下面的代码可以帮助您生成V2
do.call(rbind,
Map(function(x) do.call(paste0,x),
split.default(df1,ceiling(seq_along(df1)/2)))
)
这使
[,1]
1 "AB"
2 "AB"
3 "BA"
4 "BB"
数据
> dput(df1)
structure(list(V1 = "A", V2 = "B", V3 = "A", V4 = "B", V5 = "B",
V6 = "A", V7 = "B", V8 = "B"), class = "data.frame", row.names = c(NA,
-1L))
这是一种更冗长的方法。
xy <- structure(list(V1 = "A", V2 = "B", V3 = "A", V4 = "B", V5 = "B",
V6 = "A", V7 = "B", V8 = "B"), class = "data.frame", row.names = c(NA,
-1L))
xy <- unlist(xy) # split doesn't work on data.frames
# Make sure that length of xy is divisible by 2.
stopifnot((length(xy) %% 2) == 0)
tosplit <- rep(1:(length(xy) / 2), each = 2)
tosplit <- factor(tosplit)
xy <- split(xy, f = tosplit)
xy <- lapply(xy, FUN = paste, collapse = "")
xy <- unlist(xy)
xy
1 2 3 4
"AB" "AB" "BA" "BB"
这可以很容易地操作到您选择的 data.frame 中。
我们也可以转换成两列的matrix
,然后进行paste
do.call(paste0, as.data.frame(matrix(unlist(df1), ncol = 2, byrow = TRUE)))
#[1] "AB" "AB" "BA" "BB"
df1 <- structure(list(V1 = "A", V2 = "B", V3 = "A", V4 = "B", V5 = "B",
V6 = "A", V7 = "B", V8 = "B"), class = "data.frame", row.names = c(NA,
-1L))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.