通过选择列在R中创建数据帧..但按索引放置结果



我正试图通过从几个数据帧中选择数据来创建一个数据帧。。。基本上是一个简单的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)

最新更新