我来寻求你的帮助,因为尽管进行了各种研究,但我找不到类似的情况。
总结一下,我正在研究一个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
提前感谢您的帮助
答案 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循环。