r - 根据两个现有列中的值将第三列添加到数据框中
问题描述
我有一个与此类似的数据框,其中每个州在 4 个季度内有几个观察结果。
df <- data.frame(states=rep(c("AL","AR","FL","GA","LA","MS","NC","OK","SC","TN","TX"), times = 4),
qtr=rep(c(1,2,3,4), times = 11))
我现在想添加第三列,其中每个州为 qtr 1 和 2 分配一个值,为第 3 季度和第 4 季度分配一个不同的值。我希望结果如下所示:
state qtr unemp
AL 1 4.4
AL 2 4.4
AL 3 4.1
AL 4 4.1
AR 1 3.7
AR 2 3.7
AR 3 3.9
AR 4 3.9
我希望模式是清晰的。我试过这个
df$unemp <- ifelse(df$qtr <3 & df$states %in% "AL",4.4,4.1)
但我不知道如何为其添加更多参数。这仅创建了 unemp 列,但与参数不匹配。
解决方案
正如评论中所指出的,最好提供模仿您的数据的可重复示例。您想要做的是在一些数据操作之后进行连接 (将前两个 qtr 合并到一个类中,最后两个相同)。
library(dplyr)
df <- data.frame(states=rep(c("AL","AR","FL","GA","LA","MS","NC","OK","SC","TN","TX"), times = 4),
qtr=rep(c(1,2,3,4), times = 11))
df <- df %>% arrange(states, qtr) # pure cosmetics
df <- df %>% mutate(sem=ifelse(qtr <= 2, 1, 2), # merge the first two and the last two
key=paste0(states, "_", sem)) # create a joining key
head(df)
states qtr sem key
1 AL 1 1 AL_1
2 AL 2 1 AL_1
3 AL 3 2 AL_2
4 AL 4 2 AL_2
5 AR 1 1 AR_1
6 AR 2 1 AR_1
# recreate an external source
ext <- df %>% select(states, sem) %>% distinct()
set.seed(123) # for the sake of reproductibility
ext$unemp <- runif(nrow(ext)/2) # simulate some unemp rates
# you probably have something that looks like this:
head(ext)
states sem unemp
1 AL 1 0.2875775
2 AL 2 0.7883051
3 AR 1 0.4089769
4 AR 2 0.8830174
5 FL 1 0.9404673
6 FL 2 0.0455565
# recreate a key column
ext <- mutate(ext, key=paste0(states, "_", sem))
# have a look at it
head(ext)
states sem unemp key
1 AL 1 0.2875775 AL_1
2 AL 2 0.7883051 AL_2
3 AR 1 0.4089769 AR_1
4 AR 2 0.8830174 AR_2
5 FL 1 0.9404673 FL_1
6 FL 2 0.0455565 FL_2
# left join and drop redundant columns
df2 <- left_join(df, ext, "key") %>%
transmute(states=states.x, qtr, unemp)
head(df2)
states qtr unemp
1 AL 1 0.2875775
2 AL 2 0.2875775
3 AL 3 0.7883051
4 AL 4 0.7883051
5 AR 1 0.4089769
6 AR 2 0.4089769
那是你要找的吗?
推荐阅读
- oracle - 如何改变oracle脚本的','最终结果的连续性
- ignite - 如何在 Apache Ignite 中链接 SQL、文本和扫描查询
- javascript - 单击按钮生成下载
- python - 在 Django 中使用 nested_route 时设置视图名称
- angular - 角度不同的构建
- c++ - 为什么这个随机数生成器会生成相同的数字?
- mocha.js - 使用带有节点的 mocha 测试。此错误:TypeError:无法设置未定义的属性“文件”
- excel - 合并 2 个 Worksheet_Change 事件
- python - pyinstaller打包的exe无法运行
- android - 对象数组