gpt4 book ai didi

r - 将没有 "timevar"的数据帧从长格式转换为宽格式

转载 作者:行者123 更新时间:2023-12-03 12:23:21 25 4
gpt4 key购买 nike

我有一个遵循以下长模式的数据框:

   Name          MedName
Name1 atenolol 25mg
Name1 aspirin 81mg
Name1 sildenafil 100mg
Name2 atenolol 50mg
Name2 enalapril 20mg

并且想得到下面(我不在乎我是否可以这样命名列,只想要这种格式的数据):
   Name   medication1    medication2      medication3
Name1 atenolol 25mg aspirin 81mg sildenafil 100mg
Name2 atenolol 50mg enalapril 20mg NA

通过这个站点,我已经熟悉了 reshape/reshape2 包,并且已经尝试了几次试图让它工作,但到目前为止都失败了。

当我尝试 dcast(dataframe, Name ~ MedName, value.var='MedName')我只是得到一堆作为药物名称标志的列(转置的值是 1 或 0)例如:
 Name  atenolol 25mg  aspirin 81mg
Name1 1 1
Name2 0 0

我也试过 dcast(dataset, Name ~ variable)在我融化数据集之后,这只是吐出以下内容(只计算每个人有多少药物):
 Name  MedName
Name1 3
name2 2

最后,我尝试融合数据,然后使用 idvar="Name" 进行整形。 timevar="variable" (其中所有只是医疗名称),但是这似乎不是为我的问题而构建的,因为如果有多个与 idvar 匹配的内容,那么 reshape 只会采用第一个 MedName 而忽略其余部分。

有谁知道如何使用 reshape 或其他 R 函数来做到这一点?我意识到可能有一种方法可以通过一些 for 循环和条件来以更困惑的方式执行此操作,以基本上拆分和重新粘贴数据,但我希望有一个更简单的解决方案。非常感谢!

最佳答案

这里有一个更短的方法,利用 unlist 的方式处理名称:

library(dplyr)
df1 %>% group_by(Name) %>% do(as_tibble(t(unlist(.[2]))))
# # A tibble: 2 x 4
# # Groups: Name [2]
# Name MedName1 MedName2 MedName3
# <chr> <chr> <chr> <chr>
# 1 name1 atenolol 25mg aspirin 81mg sildenafil 100mg
# 2 name2 atenolol 50mg enalapril 20mg <NA>

关于r - 将没有 "timevar"的数据帧从长格式转换为宽格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11322801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com