在R中的数据框中创建新列,方法是比较2个现有列,然后删除后者
我还有一个问题,我在过去几个小时里一直试图解决,但没有成功。它涉及R中的一些数据集操作。假设我有以下示例数据集:在R中的数据框中创建新列,方法是比较2个现有列,然后删除后者,r,matrix,dataframe,R,Matrix,Dataframe,我还有一个问题,我在过去几个小时里一直试图解决,但没有成功。它涉及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列。谢谢大家! 使用数据。表(1.
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列。谢谢大家! 使用
数据。表(1.8.8):
DT它不是一行(因此不像@Arun的数据表
解决方案那样简洁),但这里有一种方法,其中在
和如果其他
:
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
在(mydf{
m使用转换自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
DF非常好地使用了(!v)*1+r
!+1来计算v、r和m的关系..我在考虑二进制数行:py我们的解决方案给了我以下错误:错误:意外的“=”在“gbbc1[,:=
(gbbc1$exp=”中其中gbbc1是数据集的名称,exp是尚不存在的必需列。为什么您使用gbbc1$exp
而不是exp
?如果您看到我的帖子,我不会在dt[]中使用dt$
。事实上,这解决了我的问题!我完全忽略了这一点。非常感谢!+1,这仍然可以通过在两个语句之间使用;
在一行中完成;)这个答案也很好,但我选择了上面的答案,因为在我的大数据集上,它速度更快,并且不会打印出行。感谢您的帮助!
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