将两个变量基于它们的值在R中合并成一个。

huangapple go评论94阅读模式
英文:

Combine Two Variables Into One Based on their Values in R

问题

我尝试从同一数据框(df)的两个变量中创建一个新变量,就像下面这样。这些类别是相互排斥的。

  1. VAR1 VAR2
  2. 1 1
  3. 2 2
  4. 6 6
  5. 1 =
  6. 2 =
  7. 6 = 未答

我尝试用以下脚本来获取组合变量,但它不起作用:

  1. if (df$VAR1 == 1) {
  2. df$combo = 1
  3. } else if (df$VAR2 == 1) {
  4. df$combo = 2
  5. } else if ((df$VAR1 == 2) & (df$VAR2 == 2)) {
  6. df$combo = 3
  7. } else if ((df$VAR1 == 6) & (df$VAR2 == 6)) {
  8. df$combo = 6
  9. }

任何指导将不胜感激。

英文:

I am trying to create a new variable out of two variables in the same dataframe (df), like those below. The categories are mutually exclusive.

  1. VAR1 VAR2
  2. 1 1
  3. 2 2
  4. 6 6
  5. 1 = yes
  6. 2 = no
  7. 6 = did not answer

The script I have tried to get the combined variable, but is not working is below:

  1. if (df$VAR1 == 1) {
  2. df$combo = 1
  3. } else if (df$VAR2 == 1) {
  4. df$combo = 2
  5. } else if ((df$VAR1 == 2) & (df$VAR2 == 2)) {
  6. df$combo = 3
  7. } else if ((df$VAR1 == 6) & (df$VAR2 == 6)) {
  8. df$combo = 6
  9. }

Any pointers will be appreciated.

答案1

得分: 1

你可以尝试以下两种方法来完成此任务:

使用传统的R代码:

  1. for (i in 1:nrow(df)){
  2. if (df$VAR1[i] == 1) {
  3. df$combo[i] = 1
  4. } else if (df$VAR2[i] == 1) {
  5. df$combo[i] = 2
  6. } else if ((df$VAR1[i] == 2) & (df$VAR2[i] == 2)) {
  7. df$combo[i] = 3
  8. } else if ((df$VAR1[i] == 6) & (df$VAR2[i] == 6)) {
  9. df$combo[i] = 6
  10. }
  11. }

或者使用 dplyr 包:

  1. library(dplyr)
  2. df %>%
  3. mutate(combo = case_when(
  4. VAR1 == 1 ~ 1,
  5. VAR2 == 1 ~ 2,
  6. (VAR1 == 2 & VAR2 == 2) ~ 3,
  7. (VAR1 == 6 & VAR2 == 6) ~ 6,
  8. TRUE ~ NA_real_
  9. ))
英文:

You may try

  1. for (i in 1:nrow(df)){
  2. if (df$VAR1[i] == 1) {
  3. df$combo[i] = 1
  4. } else if (df$VAR2[i] == 1) {
  5. df$combo[i] = 2
  6. } else if ((df$VAR1[i] == 2) & (df$VAR2[i] == 2)) {
  7. df$combo[i] = 3
  8. } else if ((df$VAR1[i] == 6) & (df$VAR2[i] == 6)) {
  9. df$combo[i] = 6
  10. }
  11. }
  12. VAR1 VAR2 combo
  13. 1 1 1 1
  14. 2 2 2 3
  15. 3 6 6 6

Or use dplyr

  1. library(dplyr)
  2. df %>%
  3. mutate(combo = case_when(
  4. VAR1 == 1 ~ 1,
  5. VAR2 == 1 ~ 2,
  6. (VAR1 == 2 & VAR2 == 2) ~ 3,
  7. (VAR1 == 6 & VAR2 == 6) ~ 6,
  8. TRUE ~ NA_real_
  9. ))
  10. VAR1 VAR2 combo
  11. 1 1 1 1
  12. 2 2 2 3
  13. 3 6 6 6

huangapple
  • 本文由 发表于 2023年2月16日 15:34:19
  • 转载请务必保留本文链接:https://go.coder-hub.com/75469074.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定