R根据组中的另一列设置值

R根据组中的另一列设置值,r,dplyr,R,Dplyr,我在R中有一个数据框,看起来像下面的那个。我想创建一个名为tfp-level[1980]的新列,该列取1980年的值tfp-level。考虑到按国家分组 例如,澳大利亚每年取0.796980202,哥斯达黎加每年取1.082085967 country ISO year tfp level tfp level[1980] Australia AUS 1980 0.796980202 Australia AUS 1981 0.808527768 Aust

我在R中有一个数据框,看起来像下面的那个。我想创建一个名为
tfp-level[1980]
的新列,该列取1980年的值
tfp-level
。考虑到按国家分组

例如,澳大利亚每年取0.796980202,哥斯达黎加每年取1.082085967

country     ISO year    tfp level    tfp level[1980]
Australia   AUS 1980    0.796980202 
Australia   AUS 1981    0.808527768 
Australia   AUS 1982    0.790943801 
Australia   AUS 1983    0.818122745 
Australia   AUS 1984    0.827925146     
Australia   AUS 1985    0.825170755 
Costa Rica  CRI 1980    1.082085967 
Costa Rica  CRI 1981    1.033975005 
Costa Rica  CRI 1982    0.934024811 
Costa Rica  CRI 1983    0.920588791
必须有一种方法可以巧妙地用dplyr解决这个问题,例如使用group_by命令,但我自己无法找到一个好的解决方案


谢谢。

按“国家”分组后,
变异
以获得“年份”值的相应“tfp.level”

library(dplyr)
df1 %>% 
  group_by(country) %>%
  mutate(tfllevel1980 = `tfp level`[year == 1980])
# A tibble: 10 x 5
# Groups:   country [2]
#   country    ISO    year `tfp level` tfllevel1980
#   <chr>      <chr> <int>       <dbl>        <dbl>
# 1 Australia  AUS    1980       0.797        0.797
# 2 Australia  AUS    1981       0.809        0.797
# 3 Australia  AUS    1982       0.791        0.797
# 4 Australia  AUS    1983       0.818        0.797
# 5 Australia  AUS    1984       0.828        0.797
# 6 Australia  AUS    1985       0.825        0.797
# 7 Costa Rica CRI    1980       1.08         1.08 
# 8 Costa Rica CRI    1981       1.03         1.08 
# 9 Costa Rica CRI    1982       0.934        1.08 
#10 Costa Rica CRI    1983       0.921        1.08 
数据
df1按“国家”分组后,
变异
以获得“年份”值的相应“全要素生产率水平”

library(dplyr)
df1 %>% 
  group_by(country) %>%
  mutate(tfllevel1980 = `tfp level`[year == 1980])
# A tibble: 10 x 5
# Groups:   country [2]
#   country    ISO    year `tfp level` tfllevel1980
#   <chr>      <chr> <int>       <dbl>        <dbl>
# 1 Australia  AUS    1980       0.797        0.797
# 2 Australia  AUS    1981       0.809        0.797
# 3 Australia  AUS    1982       0.791        0.797
# 4 Australia  AUS    1983       0.818        0.797
# 5 Australia  AUS    1984       0.828        0.797
# 6 Australia  AUS    1985       0.825        0.797
# 7 Costa Rica CRI    1980       1.08         1.08 
# 8 Costa Rica CRI    1981       1.03         1.08 
# 9 Costa Rica CRI    1982       0.934        1.08 
#10 Costa Rica CRI    1983       0.921        1.08 
数据
df1不知道为什么这篇文章应该得到3次否决票。嗨!试着在你的问题中加入预期的结果。不知道为什么这篇文章应该得到3次否决票。嗨!尝试将预期结果添加到问题中。
df1 <- structure(list(country = c("Australia", "Australia", "Australia", 
"Australia", "Australia", "Australia", "Costa Rica", "Costa Rica", 
"Costa Rica", "Costa Rica"), ISO = c("AUS", "AUS", "AUS", "AUS", 
"AUS", "AUS", "CRI", "CRI", "CRI", "CRI"), year = c(1980L, 1981L, 
1982L, 1983L, 1984L, 1985L, 1980L, 1981L, 1982L, 1983L), 
`tfp level` = c(0.796980202, 
0.808527768, 0.790943801, 0.818122745, 0.827925146, 0.825170755, 
1.082085967, 1.033975005, 0.934024811, 0.920588791)),
class = "data.frame", row.names = c(NA, 
-10L))