【问题标题】:Replace variable in one column differentially based on another variable根据另一个变量差异地替换一列中的变量
【发布时间】:2016-11-12 23:03:45
【问题描述】:

我在一个 db 中有一个列是一个变量,在另一列中有一个相应的索引值。我想用一组不同的数据替换索引变量,但要基于第一列中的变量。

Col1 Col2 

A    1
A    2
A    3
A    4
B    1
B    2
B    3
B    4
C    1
C    2
C    3
C    4

我想用依赖于 Col1 值的向量替换 1 到 4 值。

If A: replace c(1:4) with c(10, 5, 2, 4)
If B: replace c(1:4) with c(20, 19, 8, 5)
IF C: replace c(1:4) with c(30, 25, 20, 17)

这是我以前在不依赖于另一列的情况下在列中执行此操作的代码,但我无法让它在我目前的情况下工作:

col
1
2
3
4

index <- c(1:4)
foo <- c(4,5,6,8)
df$col <-  foo[match(df$col, index)]

col
4
5
6
8

【问题讨论】:

  • 有解决办法:df$col2[df$col1 %in% "A"] &lt;- c(10,5,2,4)df$col2[df$col1 %in% "B"] &lt;- c(20, 19, 8, 5)df$col2[df$col1 %in% "C"] &lt;- c(30, 25, 20, 17)

标签: r dataframe


【解决方案1】:

尝试data.table:

library(data.table)
dt <- data.table(Col1 = c(rep("A", 4), rep("B", 4), rep("C", 4)),
                 Col2 = c(1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4))

A <- c(10, 5, 2, 4)
B <- c(20, 19, 8, 5)
C <- c(30, 25, 20, 17)

dt[Col1 == "A", Col2 := A]
dt[Col1 == "B", Col2 := B]
dt[Col1 == "C", Col2 := C]

print(dt)
    Col1 Col2
 1:    A   10
 2:    A    5
 3:    A    2
 4:    A    4
 5:    B   20
 6:    B   19
 7:    B    8
 8:    B    5
 9:    C   30
10:    C   25
11:    C   20
12:    C   17

如果您需要data.frame 形式的结果,您始终可以通过以下方式有效地切换回来

setDF(dt)

无需复制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 2019-11-01
    • 2022-11-17
    • 2015-10-03
    • 2019-07-31
    • 2012-10-16
    相关资源
    最近更新 更多