我想重塑我的数据,这样我就创建了两个新列,条件是它们在第三列中的值。
我现在的数据看起来像这样:
Name value
df_ox_val 1
df_cat_val 2
df_cat_val 1
df_ox_val 4
df_ox_val 5
...
我想把它重塑成这样:
ox cat
1
2
1
4
5
...
我试过这个:
df %>%
mutate(ox = case_when("ox" %in% name ~ value),
(cat = case_when("cat" %in% name ~ value))
但这创建了两列NA值。
我也试过这个:
df %>%
pivot_wider(
id_cols = c("Name"),
values_from = value,
names_from = "Name"
)
但这为每个值创建了单独的列,而不是根据它们的“Name”是否包括ox或cat合并为两列。
基本上,当“Name”包含“ox”时,ox =“Name”(“cat”也是如此),但我不确定如何编码。
1条答案
按热度按时间qvk1mo1f1#
通过添加一个
id
列,您可以pivot_wider
。您可能需要一个策略来处理NA
s,它将填充结果 Dataframe 。由于这些列中的值是numeric
,如果在您的工作环境中有意义,您可以将它们替换为0。如果不改变变量的类型,就不能用空值替换NA
。首先,一些玩具数据
添加
id
和pivot
:创建于2023-09-25使用reprex v2.0.2