循环根据 R 中的其他情况创建一个新变量(非常基本)
我有一个包含三个变量的数据框:ID
、group
和 nomminated_ID
。 我想知道 nomated_ID
所属的 group
。
我想象对于每种情况,我们采用 nomminated_ID
,找到它所在的情况等于ID
,然后将原始案例中的nomminated_Group
变量设置为等于匹配案例中的group
变量。 (如果没有匹配,请将其设置为 NA)
如果这可以在没有循环的情况下完成,我不会感到惊讶,所以我对解决方案持开放态度。非常感谢您的帮助。要知道,我在发帖之前确实尝试过寻找类似的问题。
I have a dataframe with three variables: ID
, group
, and nominated_ID
.
I want to know the group
that nominated_ID
belongs in.
I'm imagining that for each case, we take nominated_ID
, find the case where it is equal to ID
, and then set the nominated_Group
variable in the original case equal to the group
variable in the matched case. (If there is no match, set it to NA)
I wouldn't be surprised if this can be done without a loop, so I'm open-minded about the solution. Thanks so much for your help. Know that I did try to look for similar questions before posting.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可以通过直接将结果分配到 data.frame 中的列来一步实现此目的,而无需使用
cbind
:我使用
with
作为引用df 的列,而无需重复写入df$
。You can achieve this in one step without the use of
cbind
by directly allocating results to a column in your data.frame:I used
with
as a convenient way of referring to the columns of df without having to repeatedly writedf$
.以下似乎有效;可能有更好的方法
The following seems to work; there may be better ways
您可以使用
transform
、match
和数组索引以语法紧凑的方式完成此操作。使用@Henry的数据框:You can do this in a syntactically compact way using
transform
,match
and array indexing. Using @Henry's data-frame:可能不是最“直观”的方式,但是如果您使用nominal_ID作为第一个副本的合并索引并使用ID作为第一个副本的by索引,则将
df
与df
合并也可以工作。第二个并保留所有行,您需要删除第二个nomated_ID
列并重新排列顺序以使内容与上面的答案匹配:Probably not the most "intuitive' way, but merging
df
againstdf
also works if you use nominated_ID as the merge index for the first copy and ID as the by index for the second and keep all rows. You need to drop the secondnominated_ID
column and rearrange the order to get things to match the answers above: