如果我有一个变量的数据,如何将一列(例如,第4列)中的条目向上移动,并将空单元格替换为"NA"?
对于数字数据:
mydata <- data.frame(replicate(5,sample(1:20,10,rep=TRUE)))
> mydata
X1 X2 X3 X4 X5
1 12 2 4 7 10
2 15 2 15 3 8
3 11 12 18 10 3
4 18 8 4 17 12
5 16 17 2 8 10
6 6 3 14 15 18
7 14 3 14 14 13
8 16 15 15 9 14
9 14 12 15 20 3
10 10 16 8 18 5我可以通过“shift”功能来实现这一点:
shift <- function(x, n){
c(x[-(seq(n))], rep(NA, n))
}
mydata[,4] <- shift(mydata[,4], 1)
> mydata
X1 X2 X3 X4 X5
1 12 2 4 3 10
2 15 2 15 10 8
3 11 12 18 17 3
4 18 8 4 8 12
5 16 17 2 15 10
6 6 3 14 14 18
7 14 3 14 9 13
8 16 15 15 20 14
9 14 12 15 18 3
10 10 16 8 NA 5如果我的数据是数字的,这是可行的。但是,如果我的数据是非数字的,它会将我的列更改为数字表示.
mydata<- data.frame(replicate(5,sample(c("apple", "banana", "peach", "grape"),10,rep=TRUE)))
> mydata
X1 X2 X3 X4 X5
1 banana banana banana grape apple
2 apple peach grape grape apple
3 grape grape banana peach peach
4 apple apple peach banana peach
5 grape banana grape apple peach
6 grape grape grape banana apple
7 grape grape peach apple peach
8 banana grape banana apple grape
9 peach apple peach peach grape
10 apple peach banana grape grape
shift <- function(x, n){
c(x[-(seq(n))], rep(NA, n))
}
mydata[,4] <- shift(mydata[,4], 1)
> mydata
X1 X2 X3 X4 X5
1 banana banana banana 3 apple
2 apple peach grape 4 apple
3 grape grape banana 2 peach
4 apple apple peach 1 peach
5 grape banana grape 2 peach
6 grape grape grape 1 apple
7 grape grape peach 1 peach
8 banana grape banana 4 grape
9 peach apple peach 3 grape
10 apple peach banana NA grape有什么想法,如何保留“苹果/香蕉/桃子/葡萄”字后的转移?或者另一种方法更好?谢谢!
预期结果:
> mydata
X1 X2 X3 X4 X5
1 banana banana banana grape apple
2 apple peach grape peach apple
3 grape grape banana banana peach
4 apple apple peach apple peach
5 grape banana grape banana peach
6 grape grape grape apple apple
7 grape grape peach apple peach
8 banana grape banana peach grape
9 peach apple peach grape grape
10 apple peach banana NA grape发布于 2018-09-19 09:00:34
问题在于,data.frame将字符串视为因素。
set.seed(0)
fruit <- c("apple", "banana", "peach", "grape")
mydata <- data.frame(replicate(5,sample(fruit, 10, rep=T)))
> mydata
X1 X2 X3 X4 X5
1 grape apple grape banana banana
2 banana apple grape banana grape
3 banana apple apple peach peach
4 peach peach peach banana grape
5 grape banana apple apple peach
6 apple grape banana grape peach
7 grape banana banana peach grape
8 grape peach apple grape apple
9 peach grape banana apple banana
10 peach banana grape peach peach
> class(mydata[, 'X4'])
[1] "factor"要解决这个问题,您可以使用data.table包,默认情况下它不将刺视为因素。它还附带了shift函数,它可以实现您想要的功能。若要将值“向上”转换为一个,请设置参数type='lead'
library(data.table)
setDT(mydata)
mydata[, X4 := shift(X4, 1, type='lead')]
> mydata
X1 X2 X3 X4 X5
1: grape apple grape banana banana
2: banana apple grape peach grape
3: banana apple apple banana peach
4: peach peach peach apple grape
5: grape banana apple grape peach
6: apple grape banana peach peach
7: grape banana banana grape grape
8: grape peach apple apple apple
9: peach grape banana peach banana
10: peach banana grape <NA> peachhttps://stackoverflow.com/questions/52401261
复制相似问题