我正试图通过从几个数据帧中选择数据来创建一个数据帧。。。基本上是一个简单的SQL类型练习,但使用R。下面创建了示例数据。数据帧A和B。从两个数据帧中进行选择并创建新的数据帧很简单,例如:
AB<-data.frame(COLUMN1=A$ID, COLUMN2=B$ONE, COLUMNS3=B$TWO, COLUMN4=A$JOB, COLUMN5=B$THREE)
或者通过索引而不是列名来选择数据:
AB<-data.frame(COLUMN1=A[,1], COLUMN2=B$ONE, COLUMNS3=B$TWO, COLUMN4=A$JOB, COLUMN5=B$THREE)
然而,我实际上需要做的是创建一个数据帧,而不是在";AB";,我需要用索引来指定它们,这样它们的顺序才正确。我试了一下,但显然没用。如有任何帮助,将不胜感激
AB<-data.frame([,1]=A$ID, [,2]=B$ONE, [,3]=B$TWO, [,4]=A$JOB, [,5]=B$THREE)
样本数据
A<-data.frame (ID=c("A", "B", "C"), CUSTOMER=c("1", "2", "3"), JOB=c("ONE", "TWO", "THREE"))
B<-data.frame (ONE=c("X", "Y", "Z"), TWO=c("10", "20", "30"), THREE=c("SMALL", "MEDIUM", "LARGE"))
我认为@Dave2e说得对。您可以从数据帧中选择列,cbind
为结果,并对数据帧进行排序。这可以使用列编号或列名来完成。
使用列号-
index1 <- c(1, 3)
index2 <- 1:3
res <- cbind(A[index1], B[index2])
res <- res[c(1, 3, 4, 2, 5)]
res
# ID ONE TWO JOB THREE
#1 A X 10 ONE SMALL
#2 B Y 20 TWO MEDIUM
#3 C Z 30 THREE LARGE
使用列名-
name1 <- c('ID', 'JOB')
name2 <- c('ONE', 'TWO', 'THREE')
res <- cbind(A[name1], B[name2])
res <- res[c('ID', 'ONE', 'TWO', 'JOB', 'THREE')]
res
另一个选项是使用select
-
library(dplyr)
res <- bind_cols(A, B) %>% select(ID, ONE, TWO, JOB, THREE)