0

我想这是一个简单的问题,但我会很感激帮助!我想为上面的单元格添加一个值。有什么建议么?

 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
4

3 回答 3

3

您应该可以通过一个简单的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
于 2019-08-30T10:47:18.960 回答
1

使用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)
于 2019-08-30T10:40:49.520 回答
1

与其他答案一样,我将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)
于 2019-08-30T11:36:31.560 回答