R 复制粘贴数据帧中的列值
我有一个看起来像这样的数据框:R 复制粘贴数据帧中的列值,r,dataframe,R,Dataframe,我有一个看起来像这样的数据框: TRUE x_value1 x_value2 y_value1 y_value2 x_id y_id 0 1 4 11 14 1 7 1 2 5 12 15 2 8 0 3 6
TRUE x_value1 x_value2 y_value1 y_value2 x_id y_id
0 1 4 11 14 1 7
1 2 5 12 15 2 8
0 3 6 13 16 3 9
TRUE x_value1 x_value2 y_value1 y_value2 x_id y_id
0 1 4 11 14 1 7
1 2 5 12 15 2 8
0 3 6 13 16 3 9
0 11 14 1 4 7 1
1 12 15 2 5 8 2
0 13 16 3 6 9 3
我想在这个数据框中添加行,并切换x和y,这样在第4行中x_value1=y_value1和x_id=y_id和y_value1=x_value1…等等
像这样:
TRUE x_value1 x_value2 y_value1 y_value2 x_id y_id
0 1 4 11 14 1 7
1 2 5 12 15 2 8
0 3 6 13 16 3 9
TRUE x_value1 x_value2 y_value1 y_value2 x_id y_id
0 1 4 11 14 1 7
1 2 5 12 15 2 8
0 3 6 13 16 3 9
0 11 14 1 4 7 1
1 12 15 2 5 8 2
0 13 16 3 6 9 3
我可以用for循环来完成这项工作,但这需要很长时间
e、 g
所需(上表二):
如果dd是原始数据帧,则可以尝试:
dd2 <- cbind(dd[1], dd[4:5], dd[2:3],dd[7:6])
names(dd2) <- names(dd)
dd <- rbind(dd, dd2)
dd2更“程序化”地执行:使用grep并为列名添加模式:
> grep("y_", names(dat))
[1] 4 5 7
> grep("x_", names(dat))
[1] 2 3 6
dat2 <- dat
# Replace all the dat2 "y_"-names with "x_"-names
colnames(dat2)[grep("y_", colnames(dat))] <-
colnames(dat)[grep("x_", colnames(dat))]
# Replace alldat2 the "x_"-names with "y_"-names
colnames(dat2)[grep("x_", colnames(dat))] <-
colnames(dat)[grep("y_", colnames(dat))]
colnames(dat2)
#[1] "TRUE." "y_value1" "y_value2" "x_value1" "x_value2" "y_id"
#[7] "x_id"
rbind(dat,dat2)
#-----------------
TRUE. x_value1 x_value2 y_value1 y_value2 x_id y_id
1 0 1 4 11 14 1 7
2 1 2 5 12 15 2 8
3 0 3 6 13 16 3 9
4 0 11 14 1 4 7 1
5 1 12 15 2 5 8 2
6 0 13 16 3 6 9 3
>grep(“y_”,名称(dat))
[1] 4 5 7
>grep(“x_uz”,名称(dat))
[1] 2 3 6
dat2与其他人建议的重新排列数据帧不同,您可以只重命名列,然后让rbind负责匹配顺序:
dat2 <- dat
colnames (dat2) <- colnames (dat) [c (1, 4, 5, 2, 3, 7, 6)]
dat3 <- rbind (dat, dat2)
dat2不是一个坏主意,但是实现有缺陷。需要修复重命名的索引。在这之后,我认为不需要pkg:reforme,因为base::rbind将匹配列。谢谢。已编辑以修复这两个问题。它们仍然与请求的内容不匹配。Dang。现在应该修好了。
dat2 <- dat
colnames (dat2) <- colnames (dat) [c (1, 4, 5, 2, 3, 7, 6)]
dat3 <- rbind (dat, dat2)
dat2 <- dat
newnames <- gsub ("(x|y)_", "\\1\\1_", colnames(dat))
newnames <- gsub ("xx_", "y_", newnames)
newnames <- gsub ("yy_", "x_", newnames)
colnames(dat2) <- newnames
dat3 <- rbind (dat, dat2)