在R中的data.frame中,在另一列的下方添加一列
不确定我是否在主题中使用了正确的英语单词来描述我需要的东西 看这个例子在R中的data.frame中,在另一列的下方添加一列,r,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 我找到了带有rbind的示例,但找不到在我的情况下如何使用它。我们可以使用取消列表创建一个向量,然后用data.fra
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
我找到了带有
rbind
的示例,但找不到在我的情况下如何使用它。我们可以使用取消列表
创建一个向量
,然后用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
d1您还可以:
df2 <- data.frame(a = c(df[,"a"], df[,"b"]))
df2您可以通过以下方式选择a
和bind
将其绑定到b
:
df <- data.frame(a=sample(1:10), b=sample(1:10))
df %>%
select(a) %>%
bind_rows(
df %>%
transmute(a = b)
)
df%
选择(a)%>%
绑定行(
df%>%
蜕变(a=b)
)
您可以从tidyr
软件包中使用
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
库(dplyr)
种子(1)
df您还可以使用tidyr
和dplyr
以新的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)
library(tidyr)
图书馆(dplyr)
种子(1)
dfrbind
失败,因为它假定您传入的参数是行,因此结果为2x10。您可以使用c()
作为端到端或20x1结果,我不保留名称/文本。这个能把我的文字转换成数字吗?嗨!你能再具体一点吗?你指的是哪几列的名字?如果是的话,那么整个要点就是要有一个新的专栏,把它们全部结合起来。如果两列中有一列不是数字,它确实会转换数字。R试图找到公共分母,并将所有内容转换为它(最有可能是您的大小写字符)。在我的例子中,两列都是电子邮件地址,因此它们都有数字和特殊字符。有没有办法指定我只需要字符?是的,通过使用正则表达式,但这是一个完全不同的问题。或许可以在这里看一看,或者只是发布一个新问题:)
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)
df4 <- pivot_longer(df, c(a,c), names_to = "letter", values_to = "d")
df5 <- data.frame(arrange(df4, letter))
head(df5); str(df5)
df5