【问题标题】:Error in `$<-.data.frame`(`*tmp*`, "mode", value = list(2L, 3L)) : replacement has 2 rows, data has 1`$<-.data.frame`(`*tmp*`, "mode", value = list(2L, 3L)) 中的错误:替换有 2 行,数据有 1
【发布时间】:2019-01-10 01:17:24
【问题描述】:

我有一个名为 New 的数据框。使用这个数据框,我需要使用 for 循环和 if-else 条件创建一个数据框

新建数据框如下

no    mode    start    end
1     S       0.026    33.059
2     T       33.176   38.057 
3     S       38.202   40.082
4     T       40.145   51.160
5     S       51.272   52.254
6     T       52.274   56.238
7     S       56.359   57.259
8     T       57.396   62.280
9     S       62.454   69.270

且所需的数据框应为以下形式 即如果模式 "S" 和它的区别是

no    mode    start    end
1     S       0.026    33.059
2     T       33.176   38.057 
3     S       38.202   40.082
4     T       40.145   62.280
5     S       62.454   69.270

为此,我使用以下代码,

mode <- 0
start <- 0
end <- 0
abc <- data.frame(mode, start, end)
for (i in 1:nrow(New)) {
   if((New[i,2] = "S" && New[i,4]-New[i,3])>1) abc$mode[i] = New[i,2]
   else
 abc$mode[i] = New[i-1,2]
   if((New[i,2] = "S" && New[i,4]-New[i,3])>1) abc$start[i] = New[i,3]
   else
 abc$start[i] = New[i-1,3]
   if((New[i,2] = "S" && New[i,4]-New[i,3])>1) abc$end[i] = New[i,4]
   else
 abc$end[i] = New[i,4]
   }

我收到以下错误

Error in "S" && New[i, 4] - New[i, 3] : invalid 'x' type in 'x && y'

提前致谢

【问题讨论】:

  • == 测试是否相等。
  • 现在我收到如下错误 New[i, 2] == "S" && New[i, 4] - New[i, 3] : invalid 'y' type in 'x && y'
  • New[i,4]-New[i,3])&gt;1 是否为所有 i 返回 TRUE/FALSE?
  • 不,New[i,4]-New[i,3])>1 没有返回 TRUE/FALSE。但定义是正确的
  • if() 需要 TRUE/FALSE

标签: r


【解决方案1】:

我认为您可以取消循环和 ifs

New <- read.table(text="
no    mode    start    end
1     S       0.026    33.059
2     T       33.176   38.057 
3     S       38.202   40.082
4     T       40.145   51.160
5     S       51.272   52.254
6     T       52.274   56.238
7     S       56.359   57.259
8     T       57.396   62.280
9     S       62.454   69.270", 
header=TRUE, stringsAsFactors=FALSE)

abc <- New[New$mode == "S" & New$end - New$start <= 1, ]

abc
#   no mode start  end
# 5  5    S  51.3 52.3
# 7  7    S  56.4 57.3

【讨论】:

  • 实际上,我想将 end-start
  • @A.V.A.BharatKumar:以什么方式结合?
  • 从问题中显示的数据来看,4、5、6、7、8行合并在名为'abc'的新数据中
  • @A.V.A.BharatKumar:你需要更精确。您是在谈论rbind()merge() 之类的东西,还是算术组合。还有什么?
  • @A.V.A.BharatKumar:rbind() 用什么?如果你 rbind() 匹配的行与 New 中的匹配行,你最终会得到重复。
猜你喜欢
  • 2020-09-03
  • 2021-12-30
  • 2020-09-06
  • 1970-01-01
  • 2020-06-29
  • 2014-06-20
  • 2018-04-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多