Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中基于两个数据帧的条件计算_R_Dataframe - Fatal编程技术网

R中基于两个数据帧的条件计算

R中基于两个数据帧的条件计算,r,dataframe,R,Dataframe,我正在进行涉及两个数据帧的计算。我创建了两个可复制的两个数据帧示例作为示例 >df1 第1天第2天第3天第4天第5天第6天第7天第8天第9天第10天 时间1 0.03 0.43 0.39 0.41 0.94 0.70 0.18 0.65 0.72 0.72 时间2 0.42 0.63 0.93 0.53 0.19 0.55 0.22 0.16 0.56 0.04 及 >df2 白天X3 X4 X5 1 1 1 9.252042 19.512621 11.601671 2 1 2

我正在进行涉及两个数据帧的计算。我创建了两个可复制的两个数据帧示例作为示例

>df1
第1天第2天第3天第4天第5天第6天第7天第8天第9天第10天
时间1 0.03 0.43 0.39 0.41 0.94 0.70 0.18 0.65 0.72 0.72
时间2 0.42 0.63 0.93 0.53 0.19 0.55 0.22 0.16 0.56 0.04

>df2
白天X3 X4 X5
1   1  1  9.252042 19.512621 11.601671
2   1  2  5.021522 17.712484  5.044728
3   2  1  9.603795 19.404302 17.206771
4   2  2 19.686793 18.791541 12.655874
5   3  1  7.546551 18.810526 19.865979
6   3  2 18.233872 19.596584 11.653980
7   4  1 17.499680 14.014276 15.553013
8   4  2  8.115352 17.898786 12.841630
9   5  1 10.719540  8.518823 19.126440
10  5  2 12.853401  6.026599 14.041490
11  6  1 19.984946 10.693528  6.890835
12  6  2 16.360035 15.778092 18.087471
13  7  1 15.498714 15.039444  5.259257
14  7  2 13.179111 17.533358  7.382507
15  8  1  5.124188 15.507194 12.547365
16  8  2  8.008336 10.463382  6.934014
17  9  1 11.246527  6.975527 14.464758
18  9  2 17.914083 18.039384 19.324091
19 10  1  9.876625 19.216317  8.787550
20 10 2 11.851955 15.729080 5.741095

df1中的列表示记录值的天数,行表示小时/或时间(时间1或2)。在df2中,前两列分别表示日期和时间,其他列表示记录数据的位置

我想用R创建另一个与df2大小相同的数据帧,将df2[,3:5]中的值除以相应的df1值,即根据df2的日期和时间列中的值,选择df1的相应值。 例如,对于df2$X3的第一个值,在新数据帧中,I的值为9.252042除以0.03。对于df2$X3的第三个值,我的值是9.603795除以0.43


提前感谢您的帮助

我想您的数据(
df1
df2
)如下所示:

df1 = data.frame(time=c(1:10),time1=c(0.03,0.43,0.39,0.41,.94,.70,.18,.065,0.72,0.72),time2 = c(.42,.63,.93,.53,.19,.55,.22,.16,.56,.04))
df2 = data.frame(Day = rep(c(1:10),each=2),Time = rep(c(1,2),10),X3=c(9.2,5.02,9.6,19.6,7.5,18.2,17.4,8.1,10.7,12.8,19.9,16.3,15.4,13.1,5.1,8,11.2,17.9,9.8,11.8),X4=c(19.5,17.7,19.4,18.8,18,19.5,14.01,17.8,8.5,6,10.6,15.7,15,17.5,15,10,6,18,19,15),X5=c(11.6,5,17,12,19,11,15,12,19,14,6,18,5,7,12,6,14,19,8,5))
然后,您将新建以创建
df3
的代码如下:

df3 = data.frame(df2$Day,df2$Time,newx3 = df2$X3 / df1$time[df2$Day],newx4 = df2$X4 / df1$time[df2$Day],newx5 = df2$X5 / df1$time[df2$Day])

我的建议是遵循整洁的数据原则

在这里,我提供了一个与您的数据帧具有相同结构但更加简化的示例,仅适用于第1-3天:

library(dplyr)
library(tidyr)

untidy = tibble(day1 = c(0.03,0.42), day2 = c(0.43,0.63), day3 = c(0.39,0.93))

tidy = tibble(day = c(1,1,2,2,3,3), time = c(1,2,1,2,1,2), val1 = c(9.252042,5.012522,9.603795,19.686793,7.546551,18.233872))

untidy_to_tidy = untidy %>% 
  gather(day,val2) %>% 
  mutate(day = as.double(gsub("day","",day)),
    time = rep(c(1,2), (ncol(untidy) * nrow(untidy))/2)) %>% 
  select(day,time,val2)

tidy %>% 
  left_join(untidy_to_tidy, by = c("day","time")) %>% 
  mutate(division = val1 / val2)
如果您是R新手,请保持简单,并这样做:

  • 使用
    read\u CSV(“YOUR\u FILE.CSV”)
    readr
    软件包中读取CSV/TSV/etc

  • 在我的例子中,替换

    不整洁=不整洁(第1天=c(0.03,0.42),第2天=c(0.43,0.63),第3天=c(0.39,0.93))


  • 您需要做的是要小心:您的两个数据帧是以一种甜蜜的顺序排列的。代码如下:

     df2[3:5]/unlist(df1)
    
                X3         X4        X5
     1  308.401400 650.420700 386.72237
     2   11.956005  42.172581  12.01126
     3   22.334407  45.126284  40.01575
     4   31.248878  29.827843  20.08869
     5   19.350131  48.232118  50.93841 
     6   19.606314  21.071596  12.53116
     :        :         :          :
     :        :         :          :
    

    我不清楚你在问什么。当除以df2$X3的第一个值时,0.03从何而来?也许您可以展示一个示例输出表?
    tidy = tibble(day = c(1,1,2,2,3,3), time = c(1,2,1,2,1,2), val1 = c(9.252042,5.012522,9.603795,19.686793,7.546551,18.233872))
    
    tidy = read_csv("YOUR_OTHER_FILE.CSV")
    
     df2[3:5]/unlist(df1)
    
                X3         X4        X5
     1  308.401400 650.420700 386.72237
     2   11.956005  42.172581  12.01126
     3   22.334407  45.126284  40.01575
     4   31.248878  29.827843  20.08869
     5   19.350131  48.232118  50.93841 
     6   19.606314  21.071596  12.53116
     :        :         :          :
     :        :         :          :