提问人:TheBoomerang 提问时间:5/4/2023 最后编辑:ThomasIsCodingTheBoomerang 更新时间:5/4/2023 访问量:46
有没有办法以 rbind 方式堆叠数据帧,其中 R 中有一个不同的列名
Is there a way to stack dataframes in an rbind fashion where there is a single different column name in R
问:
有没有办法以逐行方式堆叠数据帧。请考虑以下代码
motors <- c("audi", "honda", "ford")
age <- c(1, 2, 3)
motors1 <- motors
age1 <- c(2, 3, 1)
dat1 <- data.frame(motors, age)
dat2 <- data.frame(motors1, age1)
我想在 dat1 和 dat2 上执行 rbind() 类型的操作,但这不起作用,因为 dat1 中的“motors”列和 dat2 中的“motors2”是不同的。
有没有办法执行此操作,将两个数据帧合并为 1,因此仍然有 2 列数据,但有 8 行数据(包括列名)。
答:
3赞
GKi
5/4/2023
#1
将 的名称设置为 的 ,并在其中包括 dat1 和 2 的名称。dat2
dat1
rbind(rbind(names(dat1), dat1), setNames(rbind(names(dat2), dat2), names(dat1)))
# motors age
#1 motors age
#2 audi 1
#3 honda 2
#4 ford 3
#5 motors1 age1
#6 audi 2
#7 honda 3
#8 ford 1
如果只是为了堆叠它而不包含 colname,要么重命名 colnames,要么使用 in 并将其转换为 with .c
Map
data.frame
list2DF
rbind(dat1, setNames(dat2, names(dat1)))
# motors age
#1 audi 1
#2 honda 2
#3 ford 3
#4 audi 2
#5 honda 3
#6 ford 1
list2DF(Map(c, dat1, dat2))
# motors age
#1 audi 1
#2 honda 2
#3 ford 3
#4 audi 2
#5 honda 3
#6 ford 1
还可以查看具有不同列名称的 rbind 数据帧和让 rbind 忽略列名的最简单方法。
1赞
jpsmith
5/4/2023
#2
我用于在以下情况下快速合并数据:mapply
mapply(c, dat1, dat2)
虽然它返回一个矩阵:
motors age
[1,] "audi" "1"
[2,] "honda" "2"
[3,] "ford" "3"
[4,] "audi" "2"
[5,] "honda" "3"
[6,] "ford" "1"
这对我来说通常很好,但如果我确实需要不同的数据类型(字符、数字),我会使用:data.table::rbindlist()
data.table::rbindlist(list(dat1, dat2))
motors age
1: audi 1
2: honda 2
3: ford 3
4: audi 2
5: honda 3
6: ford 1
评论