我有一个包含100列和25行的数据框。我想在几个新数据框中绑定不同的列分组(有时多达30列),而不必每次都输入每个列名。 我想要的某些列会单独出现,例如如图6和72所示,有些人彼此相邻,例如第23,24,25,26(23:26)栏。
通常我会使用:
z <- cbind(visco$fish, visco$bird)
例如,但是我的列数太多,需要创建太多的新数据框才能输入每次需要的每列的名称。通常我不附加我的数据。
我想使用列号,例如:
z <- cbind(6 , 72 , 23:26, data=visco)
并保留原始列名,而不是自动生成的V1,V2。我尝试添加deparse.level = 2,但我的列名称变为&#34; visco $ fish&#34;而不是原来的&#34;鱼&#34;
我觉得应该有一个简单的答案,但到目前为止,我没有找到任何可行的方式。
答案 0 :(得分:1)
df <- data.frame(AA = 11:15, BB = 2:6, CC = 12:16, DD = 3:7, EE = 23:27)
df
# AA BB CC DD EE
# 1 11 2 12 3 23
# 2 12 3 13 4 24
# 3 13 4 14 5 25
# 4 14 5 15 6 26
# 5 15 6 16 7 27
df1 <- data.frame(cbind(df,df,df,df))
df1
# AA BB CC DD EE AA.1 BB.1 CC.1 DD.1 EE.1 AA.2 BB.2 CC.2 DD.2 EE.2 AA.3 BB.3
# 1 11 2 12 3 23 11 2 12 3 23 11 2 12 3 23 11 2
# 2 12 3 13 4 24 12 3 13 4 24 12 3 13 4 24 12 3
# 3 13 4 14 5 25 13 4 14 5 25 13 4 14 5 25 13 4
# 4 14 5 15 6 26 14 5 15 6 26 14 5 15 6 26 14 5
# 5 15 6 16 7 27 15 6 16 7 27 15 6 16 7 27 15 6
# CC.3 DD.3 EE.3
# 1 12 3 23
# 2 13 4 24
# 3 14 5 25
# 4 15 6 26
# 5 16 7 27
Result <- data.frame(cbind(df1[,c(1:5,14:17,20)]))
Result
# AA BB CC DD EE DD.2 EE.2 AA.3 BB.3 EE.3
# 1 11 2 12 3 23 3 23 11 2 23
# 2 12 3 13 4 24 4 24 12 3 24
# 3 13 4 14 5 25 5 25 13 4 25
# 4 14 5 15 6 26 6 26 14 5 26
# 5 15 6 16 7 27 7 27 15 6 27
注意:具有相同名称的列会在下一次出现时调整为.1
或.2
由R本身调整。
答案 1 :(得分:0)
以下是如何使用select
中的dplyr
函数执行此操作的示例 - 这应该是您进行此类数据争论的程序包
> library(dplyr)
> df <- head(iris)
> df
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
>
>## select by variable name
>newdf <- df %>% select(Sepal.Length, Sepal.Width,Species)
> newdf
Sepal.Length Sepal.Width Species
1 5.1 3.5 setosa
2 4.9 3.0 setosa
3 4.7 3.2 setosa
4 4.6 3.1 setosa
5 5.0 3.6 setosa
6 5.4 3.9 setosa
>## select by variable indices
> newdf <- df %>% select(1:2,5)
> newdf
Sepal.Length Sepal.Width Species
1 5.1 3.5 setosa
2 4.9 3.0 setosa
3 4.7 3.2 setosa
4 4.6 3.1 setosa
5 5.0 3.6 setosa
6 5.4 3.9 setosa
但是,我不确定你为什么需要这样做?你能否在原始数据框上运行分析?
答案 2 :(得分:0)
我理解你的问题是将大型数据框子化为较小的数据框架。这可以通过不同的方式实现。一种方法是,data.table
包可以帮助您保留列名,然后通过索引列来对其进行子集化。
如果您的数据为dataframe
,则可以执行
DT<- data.table(df)
# You still have to define your subsets of columns you need to create
sub_1<-c(2,3)
sub_2<-c(2:5,9)
sub_3<-c(1:2,5:6,10)
DT[ ,sub_2, with = FALSE]
输出
bird cat dog rat car
1: 0.2682538 0.1386834 0.01633384 0.5336649 0.43432878
2: 0.2418727 0.7530654 0.26999873 0.2679446 0.00859734
3: 0.1211858 0.2563736 0.92637523 0.8572615 0.63165705
4: 0.4556401 0.2343427 0.09324584 0.8731174 0.50098461
5: 0.1646126 0.9258622 0.86957980 0.3636781 0.89608415
数据
require("data.table")
DT <- data.table(matrix(runif(10*10),5,10))
colnames(DT) <- c("fish","bird","cat","dog","rat","tiger","insect","boat","car", "cycle")
答案 3 :(得分:-1)
在R中,我们有向量和矩阵。您可以使用函数c创建自己的向量。
evt
它们也是许多功能的输出,例如
c(1,5,3,4)
您可以使用rnorm(10)
,rbind
或cbind
之类的函数将向量转换为矩阵。
像这样从矢量1:1000创建矩阵:
matrix
第25行第3列的条目是什么?