我的数据框X看起来像这样。它有4列5行。
姓名年龄性别班
A 12 M C1
B 10 F C2
C M C1 N / A
D F C2 N / A
E F C1 N / A
我想将所有数据从第2列(年龄)和第3行向前移动一列到右边,以便性别和类对齐,将错误填充的年龄数据留空。我的结果应该如下:
姓名年龄性别班
A 12 M C1
B 10 F C2
C N / A M C1
D N / A F C2
E N / A F C1
请注意:这是一个包含4 mil记录和52列的非常大的数据集的情况。 任何帮助都感激不尽。提前谢谢!
答案 0 :(得分:5)
像这样:
nc <- ncol(dfr)
dfr[-(1:2), 3:nc] <- dfr[-(1:2), 2:(nc-1)]
dfr[-(1:2), 2] <- NA
行中的负数指数表示除了第1行和第2行之外的所有内容。
答案 1 :(得分:1)
> df <- data.frame("name" = LETTERS[1:5],
+ "age" = c(12, 10, "M","F","F"),
+ "gender" = c("M", "F", "C1", "C2", "C1"),
+ "class" = c("C1", "C2", NA,NA,NA))
> df
name age gender class
1 A 12 M C1
2 B 10 F C2
3 C M C1 <NA>
4 D F C2 <NA>
5 E F C1 <NA>
> df[3:nrow(df),3:ncol(df)] <- df[3:nrow(df),2:ncol(df)]
Warning message:
In `[<-.data.frame`(`*tmp*`, 3:nrow(df), 3:ncol(df), value = list( :
provided 3 variables to replace 2 variables
> df
name age gender class
1 A 12 M C1
2 B 10 F C2
3 C M M C1
4 D F F C2
5 E F F C1
> df[3:nrow(df),2] <- NA
> df
name age gender class
1 A 12 M C1
2 B 10 F C2
3 C <NA> M C1
4 D <NA> F C2
5 E <NA> F C1