【问题标题】:Creating new column in one dataframe based on column from another dataframe根据另一个数据框中的列在一个数据框中创建新列
【发布时间】:2019-09-03 12:26:25
【问题描述】:

我有一个如下的数据框:

dput(head(modellingdata, n = 5))

structure(list(X = 1:5, heading = c(2, 0.5, 2, 1.5, 2), StartFrame = c(27L, 
28L, 24L, 31L, 35L), StartYaw = c(0.0719580421911421, 0.0595571128205128, 
0.0645337707459207, 0.0717132524475524, 0.066818187062937), FirstSteeringTime = c(0.433389999999999, 
0.449999999999989, 0.383199999999988, 0.499899999999997, 0.566800000000001
), pNum = c(1L, 1L, 1L, 1L, 1L), EarlyResponses = c(FALSE, FALSE, 
FALSE, FALSE, FALSE), PeakFrame = c(33L, 34L, 32L, 38L, 46L), 
    PeakYaw = c(0.201025641025641, 0.140734297249417, 0.187890472913753, 
    0.154032698135198, 0.23129368951049), PeakSteeringTime = c(0.533459999999998, 
    0.550099999999986, 0.516700000000014, 0.616600000000005, 
    0.750100000000003), heading_radians = c(0.0349065850398866, 
    0.00872664625997165, 0.0349065850398866, 0.0261799387799149, 
    0.0349065850398866), error_rate = c(2.86537083478438, 11.459301348013, 
    2.86537083478438, 3.82015500141104, 2.86537083478438), error_growth = c(0.34899496702501, 
    0.0872653549837393, 0.34899496702501, 0.261769483078731, 
    0.34899496702501)), row.names = c(NA, 5L), class = "data.frame")

我的 df 的每一行都是一个试验。总的来说,我有 3037 行(试验)。 pNum 表示参与者编号 - 我总共有 19 个参与者。

我还有每个参与者的截取数据框:

dput(head(heading_intercept, n = 19))
c(0.432448612242496, 0.446371667203615, 0.420854119185846, 0.366763485495426, 
0.355619586392715, 0.381658477093055, 0.512552445721875, 0.317210665852951, 
0.358345666677048, 0.421441965798511, 0.477135103908373, 0.325512003640487, 
0.5542144068862, 0.454182438162137, 0.333993738757344, 0.424179318544432, 
0.272486598058728, 0.37014581658542, 0.397112817663261)

我想要做的是在我的建模数据数据框中创建一个新列“拦截”。如果 pNum 为 1,我想在 heading_intercept 数据帧中选择第一个截距,并为 pNum 为 1 的每一行输入该值。当 pNum 为 2 时,我想在 pNum 为 2 的每一行中输入第二个截距值。并且等等……

我试过这个:

for (i in c(1:19)){
  if (modellingdata$pNum == i){
    modellingdata$intercept <- c(heading_intercept[i])
  }
}

然而,这只是为每一行和每个 pNum 输入第一个 heading_intercept 值。有人有什么想法吗?任何帮助表示赞赏!

【问题讨论】:

    标签: r dataframe dplyr


    【解决方案1】:
    modellingdata$intercept <- heading_intercept[modellingdata$pNum]
    

    或对当前循环进行最少修改:

    modellingdata$intercept <- 0L
    for (i in c(1:19)){
      rows <- modellingdata$pNum == i
      if (any(rows)) {
        modellingdata$intercept[rows] <- heading_intercept[i]
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-23
      • 1970-01-01
      • 2022-01-23
      • 2023-01-04
      • 2020-08-04
      相关资源
      最近更新 更多