Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 基于另一列的值更改一列的值_R_Dplyr_Data.table - Fatal编程技术网

R 基于另一列的值更改一列的值

R 基于另一列的值更改一列的值,r,dplyr,data.table,R,Dplyr,Data.table,我想知道是否可以根据列状态的值更改列CVE的值 我有50种不同的状态,我想根据列状态的值在列CVE中设置一个值 范例 year state CVE 1980 TX 3 1986 PEN 3 1987 CAL 3 2000 TX 3 我希望如果state==“TX”,那么将列CVE的值更改为“45”,并对其他状态使用相同的逻辑 我试过这个: setDT(df)[state == "TX" , CV

我想知道是否可以根据列状态的值更改列CVE的值

我有50种不同的状态,我想根据列状态的值在列CVE中设置一个值

范例

year   state    CVE
1980   TX        3
1986   PEN       3
1987   CAL       3
2000   TX        3 
我希望如果state==“TX”,那么将列CVE的值更改为“45”,并对其他状态使用相同的逻辑

我试过这个:

setDT(df)[state == "TX" , CVE:="45" ]
setDT(df)[state == "CAL" , CVE:="50" ]
setDT(df)[state == "PEN" , CVE:="56" ]
但我不知道如何为不同的状态编写单个命令并设置CVE。
我想知道是否有一种方法可以做到这一点,避免将同一命令重复50次

使用key/val数据集和连接会更容易,因为它可以快速高效地执行

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)]
注意:这里我们假设原始数据集中的
CVE
列与“keydat”“CVE_GEO”的类型相同,即
字符

数据
df似乎只需要一个命名向量。您可以将其用作查找。以下是一个例子:

# 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  45

#创建示例数据
df
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")
# 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  45