首页 > 解决方案 > 将定量变量分配给 R 中数据框中的数据点

问题描述

我正在尝试将数字 1、2 和 3 分配给具有 80 个变量和 250 个观察值(金融时间序列)的数据框。换句话说,我想根据标准将每个数据点分为 1、2 和 3:

我在想有一些if功能可以做到这一点。我试图四处寻找这种方法,但我不知道如何正确地表达问题以获得良好的结果。

例如,使用构造类似于我的这个数据框。请注意,向量中的值可以更改。将其中的值dat1视为 1 到 5 之间的分数。

dat1 = data.frame(
  a = c(2.1,2.3,2.3), 
  b = c(3.6,3.7,3.8), 
  c = c(1.2,1.3,1.4),
  d = c(2.4, 2.3, 3.2), 
  e = c(3.9, 1.2, 3.1))

    a   b   c   d   e
1 2.1 3.6 1.2 2.4 3.9
2 2.3 3.7 1.3 2.3 1.2
3 2.3 3.8 1.4 3.2 3.1

我希望最终结果变成:

dat2=
  a b c d e
1 2 3 1 2 3
2 2 3 1 2 1
3 3 3 1 3 3

dat1如果要创建的数据点dat2具有相同的值,则对行求和:

dat3=
   X1  X2  X3
1 1.2 4.5 7.5
2 2.5 4.6 3.7
3 1.4 0.0 13.4

有什么办法可以做到这一点?我希望这是可以理解的。

标签: rvariable-assignmentassign

解决方案


您的条件基本上是floor在 dat1 上运行的。如果您想按行执行此操作,我会先转换为长格式,然后再转换为宽格式。这是使用 data.table 的示例

library(data.table)

# convert to data.table and save row id
setDT(dat1)[, id := .I]

# convert to long and the back to wide using the row id and `floor` 
dcast(melt(dat1, id = "id"), # convert to long
      id ~ ifelse(value > 3, 3, floor(value)), # convert back to wide while aggregating
      sum) # calculating sum by group
#    id   1   2    3
# 1:  1 1.2 4.5  7.5
# 2:  2 2.5 4.6  3.7
# 3:  3 1.4 0.0 13.4

推荐阅读