【发布时间】:2020-08-28 03:28:02
【问题描述】:
在下面查看我的可重现和所需的输出。
我想创建一个新变量,在其中组合来自其他观察(行)的变量值,我想使用子集在循环中识别这些值。子集的条件由循环定义。
在示例 1 中,subset(df, country == i) 不起作用,但手动进行(在 Ex.2 中) subset(df, country == 'US') 有效。我认为country == i 和country == 'US' 应该差不多。
# create a df
country <- c('US', 'US', 'China', 'China')
Trump_virus <- c('Y', 'N' ,'Y', 'N')
cases <- c (1000, 2000, 4, 6)
df <- data.frame(country, Trump_virus, cases)
#################################################### Ex.1
for (i in df$country) {
print(i)
df <- df %>%
mutate(cases_corected = ifelse(
Trump_virus == 'Y'
,subset(df, Trump_virus == 'N' & country == i)$cases*1000
,'killer_virus'
))}
##
df$cases_corected
#################################################### Ex.2
for (i in df$country) {
print(i)
df <- df %>%
mutate(cases_corected = ifelse(
Trump_virus == 'Y'
,subset(df, Trump_virus == 'N' & country == 'US')$cases*1000
,'killer_virus'
))}
##
df$cases_corected
################################################### Desired output
> df$cases_corected
[1] "2e+06"
[2] "killer_virus"
[3] "6000"
[4] "killer_virus"
【问题讨论】: