【问题标题】:How can I subtract the last two rows of this table by 2?如何将此表的最后两行减去 2?
【发布时间】:2018-04-17 17:27:32
【问题描述】:
     Loc Var  Y1    Y2
1.   UF   M  81.0  80.7
2.   UF   S 105.4  82.3
3.   UF   V 119.7  80.4

我需要一个快速的方法,而不是从头开始重建表。

提前致谢!

R 程序

它有大约 30 行,我只是为了时间而省略了它们。

我想为所有行减去最后两列 (Y1,Y2) (1,2,3,...30)

【问题讨论】:

  • 类似df1[(nrow(df1)-1):nrow(df1), 3:4] <- df1[(nrow(df1)-1):nrow(df1), 3:4]-2
  • 它无法识别 df1 对象
  • 我假设您的对象名称为“df1”。如果它不同,则将其更改为那个
  • 我根本没有命名该对象。我只想将列 y1,yw 减去 2 我真的需要命名一个新对象吗?
  • 你把数据读入R了吗?

标签: r sorting plot subtraction


【解决方案1】:

不确定您到底想要什么,但如果您只想从第 2 行和第 3 行的 Y1Y2 列中减去两个,那么您可以使用:

df[2:3, c("Y1", "Y2")] <- df[2:3, c("Y1", "Y2")] - 2

更笼统地说:

nr <- nrow(df)
nc <- ncol(df)
df[(nr-1):nr, (nc-1):nc] <- df[(nr-1):nr, (nc-1):nc] - 2

数据:

df <- data.frame(Loc = c("UF", "UF", "UF"),   # I'm calling your data frame 'df'
                 Var = c("M", "S", "V"),
                 Y1 = c(81.0, 105.4, 119.7),
                 Y2 = c(80.7, 82.3, 80.4))

Demo

【讨论】:

  • 嘿,我想为 Y1,Y2 列减去两个点。它还有大约 30 个我没有发布的其他内容,所以我需要更通用的内容。
  • @J.Abrahms 我的答案只针对Y1Y2 列。如果这不是您想要的,请更新您的问题。此外,我的答案的第二部分将针对最后两行,无论您的数据框中有多少行。
  • 抱歉给您带来了困惑。我想将最后两列 (Y1,Y2) 减去 2。例如 81-> 79。但总共有 30 行,因此 30 个 Y1 和 Y2。我只是省略了其余的行,因为时间的变化。
  • @J.Abrahms 答案已更新,假设您想从数据框的底部 2x2 部分减去 2。
  • (nr - 1):nr 中的错误:长度为 0 的参数这就是向我展示的内容
【解决方案2】:

鉴于蒂姆的数据:

df <- data.frame(Loc = c("UF", "UF", "UF"),   # I'm calling your data frame 'df'
             Var = c("M", "S", "V"),
             Y1 = c(81.0, 105.4, 119.7),
             Y2 = c(80.7, 82.3, 80.4))

您可以使用 dplyr 函数获得所需的结果:

library(dplyr) # Load the library

df2<- df %>%
       mutate(Y1=Y1-2, Y2=Y2-2)

你会得到这个:

df2
Loc Var    Y1   Y2
1  UF   M  79.0 78.7
2  UF   S 103.4 80.3
3  UF   V 117.7 78.4

这适用于 Y1 和 Y2 的任意数量的行

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多