繁体   English   中英

在 R 的 data.frame 中的另一列下方添加一列

[英]Add one column below another in a data.frame in R

不确定我是否在主题中使用了正确的英文单词来描述我的需要。

看这个例子

df <- data.frame(a=sample(1:10), b=sample(1:10))
df
    a  b
1   2  9
2   5  8
3  10  1
4   3  7
5   8  4
6   6 10
7   9  5
8   7  6
9   1  3
10  4  2

我想将b列放在a下方作为 10 个新行。

    a
1   2
2   5
3  10
4   3
5   8
6   6
7   9
8   7
9   1
10  4
11  9
12  8
13  1
14  7
15  4
16 10
17  5
18  6
19  3
20  2

我找到了rbind的示例,但无法找到如何在我的情况下使用它。

我们可以使用unlist创建一个vector ,然后用data.frame将其包裹起来创建一个新的数据集。

d1 <- data.frame(a=unlist(df, use.names = FALSE))
d1
#    a
#1   2
#2   5
#3  10
#4   3
#5   8
#6   6
#7   9
#8   7
#9   1
#10  4
#11  9
#12  8
#13  1
#14  7
#15  4
#16 10
#17  5
#18  6
#19  3
#20  2

你也可以这样做:

df2 <- data.frame(a = c(df[,"a"], df[,"b"]))

您可以使用tidyr包中的pivot_longer()

library(dplyr)
set.seed(1)
df <- data.frame(a=sample(1:10), b=sample(1:10))
pivot_longer(df, a:b)


# A tibble: 20 x 2
   name  value
   <chr> <int>
 1 a         3
 2 b         3
 3 a         4
 4 b         2
 5 a         5
 6 b         6
 7 a         7
 8 b        10
 9 a         2
10 b         5
11 a         8
12 b         7
13 a         9
14 b         8
15 a         6
16 b         4
17 a        10
18 b         1
19 a         1
20 b         9

您可以通过以下方式选择a并将其bindb

df <- data.frame(a=sample(1:10), b=sample(1:10))
df %>% 
  select(a) %>% 
  bind_rows(
    df %>% 
      transmute(a = b)
  )

您可以将变量合并为一个

df <- data.frame(a=sample(1:10), b=sample(1:10))
df2 <- data.frame(a = c(df$a, df$b))

您还可以同时使用tidyrdplyr以新的 data.frame 结束。

library(tidyr)
library(dplyr)
set.seed(1)
df <- data.frame(a=sample(1:10), b=sample(11:20), c=sample(21:30))
head(df)

df2 <- pivot_longer(df, a:c, names_to = "letter", values_to = "d")
df3 <- data.frame(arrange(df2, letter))
head(df3); str(df3)

现在所有三列都组合成一个 2 列的数据框,有 30 行。

创建比原始 data.frame 长的列时要小心,因为它们会重复其他列以使整个 data.frame 具有正确的行数。 当一遍又一遍地重复主题时,这可能是有利的,但在其他情况下可能会出现问题。

df4 <- pivot_longer(df, c(a,c), names_to = "letter", values_to = "d")
df5 <- data.frame(arrange(df4, letter))
head(df5); str(df5)
df5

注意 R 重复列 'b' 以使其与其他列(20 个字符)一样长

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM