首页 > 解决方案 > R循环名称和变量

问题描述

所以我有这个数据集,每个人都有多行,代表每个人发生的相同类型的事件。每个人最多可以有 39 次这个事件。我要做的是将所有这些事件放在一行中,供每个人使用。现在每个事件都附加了多个变量。例如,我的目标是让第一个事件的所有变量都称为 A1、B1、C1 等……然后第二个事件的变量将是 A2、B2、C2 等……等等。所以我在想解决这个问题的最好方法是为每个事件数创建一个单独的文件,所以每个第一个事件都在同一个文件中,每一秒都在第二个等等......然后我会重命名所有变量他们的名字中有正确的数字,最后我会将所有内容重新合并在一起。

所以我在想最好的方法是使用 for 循环,但我似乎无法让它工作。

这是我当前的代码

for (i in 2:39){
  sentence[i]_prison <- sentence_prsubset[which(sentence_prsubset$order_sentence==[i])]
  sentence[i]_prison <- rename(sentence[i]_prison, 
                            c(difftime_SB[i]days="difftime_SBdays",
                              difftime_SB(i)weeks="difftime_SBweeks",
                              difftime_SB(i)fnight="difftime_SBfnight",
                              difftime_SB(i)fnrnum="difftime_SBfnrnum",
                              difftime_SE(i)days="difftime_SEdays",
                              difftime_SE(i)weeks="difftime_SEweeks",
                              difftime_SE(i)fnight="difftime_SEfnight",
                              difftime_SE(i)fnrnum="difftime_SEfnrnum"))
   sentence(i)_prison <- subset(sentence(i)_prison, select=-c(order_sentence)) }

目前我收到“意外令牌”错误。我只尝试了 for 循环的第一行,但这也不起作用,我仍然有这个错误。我尝试将 i 放入 [i] 或 (i) 中,但没有奏效。我真的很想在变量名中间加上数字。

我还没有在代码中添加合并,因为在每种情况下代码都不能正常工作。但是为什么我不能这样做,我怎样才能做得更好,这可能吗。

我以前用 Stata 做过这个,但我似乎无法理解 R 如何使用这种类型的 for 循环。

标签: rloopsfor-loopmergerename

解决方案


在对象名称中嵌入子集索引在 R 中不起作用。您需要将其放在对象的末尾。执行比较[i]也不是我在 R 中看到的。这段代码不起作用:

sentence[i]_prison <- sentence_prsubset[which(sentence_prsubset$order_sentence==[i])]

作为一般建议:创建一个包含两列的数据框或小标题:人名和事件。我期望的两个字符串。然后按名称 ( dplyr group_by) 分组并使用该tidyr函数pivot_wider更改为宽数据对象。


推荐阅读