根据另一列的变量多次重新分配同一个变量

时间:2018-03-19 17:17:54

标签: r for-loop

我来寻求你的帮助,因为尽管进行了各种研究,但我找不到类似的情况。

总结一下,我正在研究一个data.frame(我提出了一个部分),其中我有两个类别,由第一列中的符号区分,符号为“ - ”和“*”

我有一个单独的标识符(df $ V8)分配给标记为“*”的所有个人(df $ V1)

我想根据df $ V7列中包含的变量将此标识符分配给标记为“ - ”(df $ V1)的个人

> df
  V1       V7           V8
1  - 31404168         <NA>
2  - 11564168         <NA>
3  - 11563520         <NA>
4  * 11563520 0034 3520 03
5  * 11564168 0034 4168 03
6  * 31404168 0034 4168 04

我想尝试一个循环,但我仍然坚持写它

for (i in 1:nrow(df)) {
 if (df$V7[i]== "x" & df$V8[i] == <NA>){
  df$V8[i]<-df$V8...  
 } else {df$V8[i]<-df$V8[i]}
}

我在寻找:

> df
  V1       V7           V8
 1  - 31404168 0034 4168 04
 2  - 11564168 0034 4168 03
 3  - 11563520 0034 3520 03
 4  * 11563520 0034 3520 03
 5  * 11564168 0034 4168 03
 6  * 31404168 0034 4168 04

提前感谢您的帮助

1 个答案:

答案 0 :(得分:0)

你通过使用for循环错过了R的力量。我假设每个V7出现两次,一次是“*”,一次是“ - ”,而且V8是一个字符串类:

library(dplyr)
df<- group_by(df, V7) %>% 
    mutate(V8=max(V8, na.rm=TRUE))

以下是这里发生的事情:使用dplyr包,我将df分组到基于V7的组中(理想情况下,每个组都有两个案例)。然后我进入V8,无论V1,无论哪个V8都不是NA(我在这里使用max()纯粹是为了方便)。

请记住,在R中,默认值是针对每一行发生的每个操作,因此如果您只想查看整个数组或其中的一部分,并执行某些操作,则不需要{{1循环。