如何使用循环或R中的其他函数使这个“变异”语句?

时间:2019-01-21 22:22:58

标签: r loops lapply

这是我的代码;

structure(list(VALUE = c(29.95, 1.48, 1, 39.28, 159.2, 68.3)), .Names = "VALUE", row.names = c(NA, 
-6L), class = c("tbl_df", "tbl", "data.frame"))

dta_n4 <- dta_n3 %>%
  mutate(VALUE_3 = ifelse(VALUE < 3, 1, 0)) %>%
  mutate(VALUE_6 = ifelse(VALUE < 6, 1, 0)) %>%
  mutate(VALUE_9 = ifelse(VALUE < 9, 1, 0)) %>%
  mutate(VALUE_12 = ifelse(VALUE < 12, 1, 0)) %>%
  mutate(V_VALUE_3 = VALUE_3 * 100) %>%
  mutate(V_VALUE_6 = VALUE_6 * 100) %>%
  mutate(V_VALUE_9 = VALUE_9 * 100) %>%
  mutate(V_VALUE_12 = VALUE_12 * 100)

如何使用循环(3、6、9、12)制作“ VALUE_n”?

1 个答案:

答案 0 :(得分:1)

在一次迭代中使用超快速for-set,您可以执行以下操作:

library(data.table)
setDT(df). ## df is your data

cols <- c(3,6,9,12)

for(i in cols){
    temp_col <- paste0('VALUE_', as.character(i))
    set(x = df, j = temp_col, value = ifelse(df$VALUE < i, 1, 0))    
    set(x = df, j = paste0('V_', temp_col), value=df[[temp_col]]*100)
}

    VALUE VALUE_3 V_VALUE_3 VALUE_6 V_VALUE_6 VALUE_9 V_VALUE_9 VALUE_12 V_VALUE_12
1:  29.95       0         0       0         0       0         0        0          0
2:   1.48       1       100       1       100       1       100        1        100
3:   1.00       1       100       1       100       1       100        1        100
4:  39.28       0         0       0         0       0         0        0          0
5: 159.20       0         0       0         0       0         0        0          0
6:  68.30       0         0       0         0       0         0        0          0