我想这是一个简单的问题,但我会很感激帮助!我想为上面的单元格添加一个值。有什么建议么?
a <- c(0,"D",0,"E",0,"F")
b <- c(0,"E",0,"F",0,"D")
c <- cbind(a,b)
c <- as.data.frame(c)
c
a b
0 0
D E
0 0
E F
0 0
F D
I want it to look like this:
a b
D0 E0
D E
E0 F0
E F
F0 D0
F D
我想这是一个简单的问题,但我会很感激帮助!我想为上面的单元格添加一个值。有什么建议么?
a <- c(0,"D",0,"E",0,"F")
b <- c(0,"E",0,"F",0,"D")
c <- cbind(a,b)
c <- as.data.frame(c)
c
a b
0 0
D E
0 0
E F
0 0
F D
I want it to look like this:
a b
D0 E0
D E
E0 F0
E F
F0 D0
F D
您应该可以通过一个简单的for循环来做到这一点:
a <- c(0,"D",0,"E",0,"F")
b <- c(0,"E",0,"F",0,"D")
c <- data.frame(a, b, stringsAsFactors=FALSE)
for(row in seq(from=1, to=nrow(c), by=2)){
c[row, ] <- paste0(c[row+1, ], c[row, ])
}
print(c)
# a b
#1 D0 E0
#2 D E
#3 E0 F0
#4 E F
#5 F0 D0
#6 F D
使用dplyr,我们可以使用从奇数lead行粘贴值row_number()
library(dplyr)
df %>%
mutate_all(~ifelse(row_number() %% 2 == 1, paste0(lead(.), .), .))
# a b
#1 D0 E0
#2 D E
#3 E0 F0
#4 E F
#5 F0 D0
#6 F D
数据
确保您使用stringsAsFactors = FALSE
a <- c(0,"D",0,"E",0,"F")
b <- c(0,"E",0,"F",0,"D")
df <- data.frame(a,b, stringsAsFactors = FALSE)
与其他答案一样,我将as.data.frame调用修改为 have stringsAsFactors = F。
n_rows <- nrow(c)
c_changed <- c('a', 'b')
c[seq(1, n_rows, by = 2), c_changed] <- Map(paste0, c[seq(2, n_rows, by = 2), c_changed], c[seq(1, n_rows, by = 2), c_changed])
c
a b
1 D0 E0
2 D E
3 E0 F0
4 E F
5 F0 D0
6 F D
数据:
a <- c(0,"D",0,"E",0,"F")
b <- c(0,"E",0,"F",0,"D")
c <- cbind(a,b)
c <- as.data.frame(c, stringsAsFactors = F)