我还有一个问题,我过去几个小时一直在努力解决这个问题。它涉及R中的一些数据集操作。想象一下,我有以下样本数据集:
a,b,v,r
1,3,1,0
2,5,1,1
3,6,0,1
1,5,1,0
2,4,1,1
3,6,0,1
我需要通过以下规则比较列[v,r]的值来创建第三列(比如m)。如果v = 1,则r = 0,则m = 0.如果v = 1,r = 1,则m = 1且如果v = 0,则r = 1,则m = 2。[v,r]永远不能取值(0,0)。
我想知道如何创建第三列并在一行中删除列v,r。谢谢!
答案 0 :(得分:5)
使用data.table
(1.8.8):
DT <- data.table(DF)
DT[, `:=`(m = (!v) * 1 + r, v = NULL, r=NULL)]
# a b m
# 1: 1 3 0
# 2: 2 5 1
# 3: 3 6 2
# 4: 1 5 0
# 5: 2 4 1
# 6: 3 6 2
答案 1 :(得分:3)
它不是一行(所以不像@ Arun&#39; data.table
解决方案那么活泼)但是这里有within
和ifelse
的一种方法:< / p>
within(mydf, {
m <- ifelse(v == 1 & r == 0, 0, ifelse(v == 1 & r == 1, 1, 2))
rm(v, r)
})
# a b m
# 1 1 3 0
# 2 2 5 1
# 3 3 6 2
# 4 1 5 0
# 5 2 4 1
# 6 3 6 2
答案 2 :(得分:2)
使用transform
个套件中的base
DF <- read.csv(textConnection("a,b,v,r\n1,3,1,0\n2,5,1,1\n3,6,0,1\n1,5,1,0\n2,4,1,1\n3,6,0,1"), header = TRUE)
transform(DF, m = (!v) * 1 + r, v = NULL, r = NULL)
## a b m
## 1 1 3 0
## 2 2 5 1
## 3 3 6 2
## 4 1 5 0
## 5 2 4 1
## 6 3 6 2