考虑以下data.frame:
df <- data.frame(Industry = c("Agriculture", "Fishery", "Industry"),
Value = c(0,0,0))我想很容易地将一个值放入dataframe中。假设我想要“农业”的数字1。当然,在这种情况下,我可以很容易地通过:
df <- data.frame(Industry = c("Agriculture", "Fishery", "Industry"),
Value = c(1,0,0))但我有一个巨大的数据,所以这不是那么容易做。相反,我是否有可能写:
change <- c("Agriculture", 1)如果它是macthing,那么它将更新df。但我该怎么做呢?我应该可以同时改变多个单元格(例如,“农业”和“渔业”)。
发布于 2021-12-17 06:51:08
dplyr解决方案:
您可以写下要更新的行业列表,然后在%in%函数中使用mutate操作符:
library(dplyr)
df <- data.frame(Industry = c("Agriculture", "Fishery", "Industry"),
Value = c(0,0,0))
list_of_industries <- c("Agriculture","Fishery")
df <- df %>%
mutate(Value = ifelse(Industry %in% list_of_industries,
1,
0))输出:
Industry Value
1 Agriculture 1
2 Fishery 1
3 Industry 0发布于 2021-12-17 06:51:11
你可以试试
df$Value[df$Industry == "Agriculture"] <- 1
Industry Value
1 Agriculture 1
2 Fishery 0
3 Industry 0和
df$Value[df$Industry %in% c("Agriculture", "Fishery")] <- 1
Industry Value
1 Agriculture 1
2 Fishery 1
3 Industry 0发布于 2021-12-17 09:23:02
使用data.table方法进行合并和内部更新
library(data.table)
# set df as dt
dt <- data.table(df)
# update table
updt <- fread(text="
Industry,New_Value
Agriculture,1
Fishery,2
")
# temporary merge on Industry column to fetch new value
# and inplace update dt
dt[
updt, on="Industry", # merging
Value := New_Value # inplace update
]得到
Industry Value
1: Agriculture 1
2: Fishery 2
3: Industry 0https://stackoverflow.com/questions/70389363
复制相似问题