【问题标题】:How to input nominal values into one column based on values in another column through If_else statements如何通过 If_else 语句根据另一列中的值将标称值输入一列
【发布时间】:2019-09-10 06:07:29
【问题描述】:

我正在尝试根据专用于年龄的列输入名义变量。基本上,如果某人的年龄在 1 到 5 岁之间,如年龄列中所示,那么我希望年龄组列的值为 1,因为他们在年龄组 1 中。我正在尝试多次执行此操作自年龄以来的列每年增加一个。我尝试通过使用 if else 函数的 for 循环来执行此操作,但它不起作用。

`my_vector_1<-c(1,3,5,7,9,11,2,4,6,8,10,12,3,5,7,9,11,13)

my_matrix_1<-matrix(data=my_vector_1, nrow=6, ncol=3)

colnames(my_matrix_1)<-c(paste0("Age", 2000:2002))

rownames(my_matrix_1)<-c(paste0("Participant", 1:6))

my_data_1<-data.frame(my_matrix_1)

my_data_1<-cbind("AgeGroup2000"=NA, "AgeGroup2001"=NA, "AgeGroup2002"=NA, my_data_1)

my_data_1

#I'm basically trying to make the below code into a for loop

my_data_1$AgeGroup2000[my_data_1$Age2000 %in% 1:5]<-1
my_data_1$AgeGroup2000[my_data_1$Age2000 %in% 6:10]<-2
my_data_1$AgeGroup2000[my_data_1$Age2000 %in% 11:15]<-3

my_data_1$AgeGroup2001[my_data_1$Age2001 %in% 1:5]<-1
my_data_1$AgeGroup2001[my_data_1$Age2001 %in% 6:10]<-2
my_data_1$AgeGroup2001[my_data_1$Age2001 %in% 11:15]<-3

my_data_1$AgeGroup2002[my_data_1$Age2002 %in% 1:5]<-1
my_data_1$AgeGroup2002[my_data_1$Age2002 %in% 6:10]<-2
my_data_1$AgeGroup2002[my_data_1$Age2002 %in% 11:15]<-3`

【问题讨论】:

    标签: r dataframe for-loop if-statement


    【解决方案1】:

    也许在这里使用findIntervalcut 会更好。我们可以使用lapply 将其应用于多个列

    my_data_1[paste0("AgeGroup_", 2000:2002)] <- lapply(my_data_1, findInterval, c(1, 6, 11))
    
    
    #             Age2000 Age2001 Age2002 AgeGroup_2000 AgeGroup_2001 AgeGroup_2002
    #Participant1       1       2       3             1             1             1
    #Participant2       3       4       5             1             1             1
    #Participant3       5       6       7             1             2             2
    #Participant4       7       8       9             2             2             2
    #Participant5       9      10      11             2             3             3
    #Participant6      11      12      13             3             3             3
    

    mutate_all 来自dplyr

    library(dplyr)
    my_data_1 %>%  mutate_all(list(Group = ~findInterval(., c(1, 6, 11))))
    

    数据

    my_vector_1<-c(1,3,5,7,9,11,2,4,6,8,10,12,3,5,7,9,11,13)
    my_matrix_1<-matrix(data=my_vector_1, nrow=6, ncol=3)
    colnames(my_matrix_1)<-c(paste0("Age", 2000:2002))
    rownames(my_matrix_1)<-c(paste0("Participant", 1:6))
    my_data_1<-data.frame(my_matrix_1)
    

    【讨论】:

      猜你喜欢
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 2023-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多