【问题标题】:Changing observation`s name using dplyr使用 dplyr 更改观察的名称
【发布时间】:2017-11-09 18:12:36
【问题描述】:

假设我有这个数据集:

Variable <- c("GDP")
Country <- c("Brazil", "Chile") 
df <- data.frame(Variable, Country)

我想将 GDP 更改为“Country_observation”GDP,即巴西 GDP 和智利 GDP。

我有一个更大的数据集,我一直在尝试使用

df %>% mutate(Variable = replace(Variable, Variable == "GDP", paste(Country, "GDP")))

但是,对于“变量”中满足条件的每个观察,它将打印变量“国家”的第一个观察。有什么方法可以让 paste() 在它所应用的行上使用 Country 的值?

我尝试过使用 rowwise(),但没有成功。我也试过下面的代码,遇到了同样的问题

df %>% mutate(Country = ifelse(Country == "Chile", replace(Variable, Variable == "GDP", 
paste(Country, "GDP")), Variable))

谢谢大家!

编辑

我不能简单地使用 unite,因为我仍然需要变量 Country。所以我发现的一个解决方法是(我还有其他几个需要更改名称的观察结果)

df %>% mutate(Variable2 = ifelse(Variable == "GDP", paste0(Country, " ",
Variable), Variable)) %>% 
mutate(Variable2 = replace(Variable2, Variable2 ==
"CR", "Country Risk")) %>% 
mutate(Variable2 = replace(Variable2, Variable2 
== "EXR", "Exchange Rate")) %>% 
mutate(Variable2 = replace(Variable2,mVariable2 == "INTR", "Interest Rate")) 
%>% select(-Variable) %>% 
select(Horizon, Variable = Variable2, Response, Low, Up, Shock, Country,
Status)

编辑 2 我想要的输出是

Horizon   Variable   Response Shock Country
1         Brazil GDP   0.0037  PCOM  Brazil
2         Brazil GDP   0.0060  PCOM  Brazil
3         Brazil GDP   0.0053  PCOM  Brazil
4         Brazil GDP   0.0033  PCOM  Brazil
5         Brazil GDP   0.0021  PCOM  Brazil
6         Brazil GDP   0.0020  PCOM  Brazil

【问题讨论】:

  • paste 在我看来没问题,但没有使用 replace。您也可以使用来自tidyr 包的unite

标签: r dplyr tidyverse


【解决方案1】:

这个例子应该会有所帮助:

library(tidyr)
library(dplyr)

Variable <- c("GDP")
Country <- c("Brazil", "Chile") 
value = c(5,10)
df <- data.frame(Variable, Country, value)

# original data
df

#   Variable Country value
# 1      GDP  Brazil     5
# 2      GDP   Chile    10

# update
df %>% unite(NewGDP, Variable, Country)

#       NewGDP value
# 1 GDP_Brazil     5
# 2  GDP_Chile    10

如果你想使用paste,你可以这样做:

df %>% mutate(NewGDP = paste0(Country,"_",Variable))

#   Variable Country value     NewGDP
# 1      GDP  Brazil     5 Brazil_GDP
# 2      GDP   Chile    10  Chile_GDP

【讨论】:

  • 非常感谢!你的建议给了我一个关于如何解决它的想法,尽管我认为可能有更好的方法来解决我的问题。 unity 的问题是我仍然需要变量 Country,所以我无法摆脱它。所以我使用 mutate 创建了一个“Variable2”,然后我做了一些操作来重新排序。
  • 我并没有真正得到您想要的输出。我可能在这里遗漏了一些东西:-)。你能发布你想要的样子吗?
  • 我做了一个编辑,所以你可以看到我在想什么。但是再次感谢您,您的回答让我知道了如何解决这个问题。
  • Unite 有一个“删除”选项,您可以将其设置为 False 并保留初始列。试试看。
猜你喜欢
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 2013-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多