我想知道我能否根据列状态的值更改列CVE的值。
我有50个不同的状态,我想根据列状态的值在列CVE中设置一个值。
示例
year state CVE
1980 TX 3
1986 PEN 3
1987 CAL 3
2000 TX 3 我想要的是,如果状态== "TX“,那么将列CVE的值更改为"45”,以及其他状态的相同逻辑。
我试过用这个:
setDT(df)[state == "TX" , CVE:="45" ]
setDT(df)[state == "CAL" , CVE:="50" ]
setDT(df)[state == "PEN" , CVE:="56" ]但我不知道如何为不同的状态编写一个命令并设置CVE。我想知道是否有办法避免重复相同的命令50次。
发布于 2021-02-04 23:04:24
使用key/val数据集和join可以更容易地完成,这样可以快速有效地完成任务。
library(data.table)
keydat <- data.table(state = c("TX", "CAL", "PEN"), CVE_GEO = c("45", "50", "56"))
setDT(df)[keydat, CVE := i.CVE_GEO, on = .(state)]-output
df
# year state CVE
#1: 1980 TX 45
#2: 1986 PEN 56
#3: 1987 CAL 50
#4: 2000 TX 45注意:这里我们假设原始数据集中的CVE列与'keydat‘'CVE_GEO’(即character类)的类型相同
数据
df <- structure(list(year = c(1980L, 1986L, 1987L, 2000L), state = c("TX",
"PEN", "CAL", "TX"), CVE = c("3", "3", "3", "3")), row.names = c(NA,
-4L), class = "data.frame")发布于 2021-02-05 01:02:36
看来你所需要的只是一个命名的向量。你可以用它来查找。下面是一个示例:
# Create sample data
df <- read.table(header = TRUE, text = '
year state CVE
1980 TX 3
1986 PEN 3
1987 CAL 3
2000 TX 3
')
# Create lookup named vector
vct <- c(TX = 45, PEN = 54, CAL = 29)
# Apply vector to CVE column
df$CVE <- vct[df$state]
# View results
df
# year state CVE
# 1 1980 TX 45
# 2 1986 PEN 54
# 3 1987 CAL 29
# 4 2000 TX 45https://stackoverflow.com/questions/66055160
复制相似问题