如何使用符合R中第三列条件的第二列值创建列?

时间:2017-06-02 16:04:25

标签: r

我在RStudio中有一个数据集Comorbidity,其中我添加了诸如MDDOnset之类的列,并且如果MDD开始时的年龄<1。 OUD的开始,它等于1,如果相反,则等于2.我还有另一列PhysDis,其值为0-100(本质上为数字)。

我想要做的是创建一个包含PhysDis值的新列,但仅限MDDOnset == 1,另一个MDDOnset == 2。我想制作这些专栏,以便我可以对它们进行t检验并比较两组(在OUD之前有MDD的那些组,以及在OUD之后有关于哪组具有更大的身体残疾评分的MDD的那些组)。我想要MDDOnset不是1的任何情况都是NA。

ttest1 <-t.test(Comorbidity$MDDOnset==1, Comorbidity$PhysDis)
ttest2 <-t.test(Comorbidity$MDDOnset==2, Comorbidity$PhysDis)

当我进行两次t检验时,一次MDDOnset = 1,另一次等于2时,y的平均值(Comorbidity $ PhysDis)是相同的,当我查看原始csv文件时,结果证明这个意思是整个列的平均值,而不仅仅是MDDOnset的值为1或2的情况。如果有一种不同的方式运行t-tests只有在MDDOnset = 1时才具有PhysDis的平均值,而另一种方法只有在MDDOnset == 2且不需要创建新列时才具有PhysDis的平均值,那么请告诉我..对不起,如果有任何类似的问题,或者我的方法是关闭的,我是R的新手和一般的编程,并提前感谢。

这是一个较小的数据框,我试图复制新列已切换长度的错误。问题是C的长度是4,如果我可以复制错误,D的长度将是6。

> A <- sample(1:10)
> B <-c(25,34,14,76,56,34,23,12,89,56)
> alphabet <-data.frame(A,B)
> alphabet$C <-ifelse(alphabet$A<7, alphabet$B, NA)
> alphabet$D <-ifelse(alphabet$A>6, alphabet$B, NA)
> print(alphabet)
    A  B  C  D
1   7 25 NA 25
2   9 34 NA 34
3   4 14 14 NA
4   2 76 76 NA
5   5 56 56 NA
6  10 34 NA 34
7   8 23 NA 23
8   6 12 12 NA
9   1 89 89 NA
10  3 56 56 NA
> length(which(alphabet$C>0))
[1] 6
> length(which(alphabet$D>0))
[1] 4

1 个答案:

答案 0 :(得分:0)

我会使用dplyr包中的mutate命令。

Comorbidity <- mutate(Comorbidity, newColumn = (ifelse(MDDOnset == 1, PhysDis, "")), newColumn2 = (ifelse(MDDOnset == 2, PhysDis, "")))