【问题标题】:Use an if inside loop to replace the data between two dataframe使用 if 内部循环替换两个数据帧之间的数据
【发布时间】:2022-12-03 03:35:55
【问题描述】:

我有两个文件,想在测试后将日期从一个文件传输到另一个文件

文件一:

ID, X1, X2, X3
2000, 1, 2, 3
2001, 3, 4, 5
1999, 2, 5, 6
2003, 3, 5, 4

文件2:

ID, X1, X2, X3,
2000,
2001,
2002,
2003,

结果文件将类似于:

1999 《有误》

文件2:

ID, X1, X2, X3
2000, 1, 2, 3
2001, 3, 4, 5
2002, Na, Na, Na
2003, 3, 5, 4

我尝试将 for 循环与 if 一起使用,不幸的是,它不起作用:

for(j in length(1: nrows(file1){
   for(i in length(1: nrows(file2){
     if( file1&ID[j]>= file2&ID[j+1]){
      print(j, ' wrong value')
     esle 
     file2[i,]<- file1[j,]
break

如果我能得到一些想法,编码如何获得类似于结果文件的东西,那就太好了

我希望我能找到正确的代码来解决这个问题

【问题讨论】:

    标签: r


    【解决方案1】:

    无需使用循环进行迭代,您只需使用 dplyr 包中的 right_join

    df1 %>% 
      right_join(df2, by="ID") %>% 
      arrange(ID)
        ID X1 X2 X3
    1 2000  1  2  3
    2 2001  3  4  5
    3 2002 NA NA NA
    4 2003  3  5  4
    

    样本数据

    df1 <- structure(list(ID = c(2000L, 2001L, 1999L, 2003L), X1 = c(1L, 
    3L, 2L, 3L), X2 = c(2L, 4L, 5L, 5L), X3 = c(3L, 5L, 6L, 4L)), class = "data.frame", row.names = c(NA, 
    -4L))
    
    df2 <- structure(list(ID = 2000:2003), class = "data.frame", row.names = c(NA, 
    -4L))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-07
      • 2019-12-06
      • 2021-12-27
      • 2021-05-07
      • 2021-10-10
      • 2019-10-09
      相关资源
      最近更新 更多