R for循环if语句从第二个df打印值

问题描述

我在df1中有一个要打印到df2中的值,但它们的行数不均匀

我正在考虑使用的那种代码类似

for(i in 1:dim(df1)[1]){
   df2$INT[if(df1$SN == df2$SN)
 {df1$INT[1]}
]}

但是我只是吐出错误,我对for循环不太熟悉

df1

SN    ...   INT
1           0.015
2           0.01891
3           0.0208
4           ...
5           ...

df2

...     SN   INT
...     1    NA
...     1    NA
...     2    NA
...     3    NA
...     3    NA
...     ...  ...

df_OUTPUT

 ...     SN   INT
...     1     0.015
...     1     0.015
...     2     0.01891
...     3     0.0208
...     3     0.0208
...     ...  ...

解决方法

听起来像您想要做的是将基于SN列的两个表连接起来。我假设在df2中,整个INT列都是NA值,可以删除。

Base R解决方案

# drop INT from df2
df2 <- df2[-2]

# join based on SN column
merge(df1,df2)

#-----
  SN     INT
1  1 0.01500
2  1 0.01500
3  2 0.01891
4  3 0.02080
5  3 0.02080

dplyr解决方案

library(dplyr)

df2 %>%
  select(-INT) %>%
  left_join(df1)

#----
Joining,by = "SN"
  SN     INT
1  1 0.01500
2  1 0.01500
3  2 0.01891
4  3 0.02080
5  3 0.02080


# Create dummy data
df1 <- data.frame(SN = 1:3,INT = c(0.015,0.01891,0.0208))
df2 <- data.frame(SN = c(1,1,2,3,3),INT = NA)