繁体   English   中英

使用R中的for循环重新编码数组列表变量中的每个元素

[英]Recode each element in an array list variable using for loop in R

我是R的新手,但我一直坚持下去。 我在下面有一个数据集,在其中创建了一个名为“ amountOfTxn_array”的新数组列表变量,该变量包含顺序的三个数值。 这些是从1月到3月的交易量。我的目标是从此数组列表创建新变量,以迭代“ amountOfTxn_array”中的每个数据元素。

> head(myData_05_Array)
Index   accountID   amountOfTxn_array
1:00    8887    c(36.44, 75.00,185.24)
2:00    13462   c(639.45,656.10,237.00)
3:00    47249   c(0,  24, 2012)
4:00    49528   c(1189.20,2326.26,1695.89)
5:00    57201   c(24.67, 0.00, 0.00)
6:00    57206   c(0.00, 661.98,2957.68)

str(myData_05_Array)类'data.table'和'data.frame':3176个对象。 4个变量的总和:$ accountID:int 8887 13462 47249 49528 57201 57206 58522 79073 80465 81032 ... $ amountOfTxn_200501:num 36.4 639.5 0 1189.2 24.7 ... $ amountOfTxn_200502:num 75656 24 2326 0 ... $ amountOfTxn_200503:num 185 237 2012 1696 0 ... $ amountOfTxn_array:列表3176

另外,下面提供了一个用于创建新变量的示例代码,其中,如果数组中的值大于100,我想标记1,否则标记0。 当我运行示例代码时,我得到“错误:(列表)对象不能被强制键入'double'错误。请问对此的解决方案。我非常感谢您的答复。谢谢!

> for(i in 1:3)
+ {  
+   if(myData_05_Array$amountOfTxn_array[i] > 100){
+     myData_05_Array$testArray[i] <- 1
+   }
+   else{
+     myData_05_Array$testArray[i] <- 0
+   }
+ }

错误:(列表)对象无法强制输入“ double”类型

我期望的输出如下所示:amountOfTxn_testArray c(0,0,1)c(1,1,1)c(0,0,0)c(1,1,1)c(0,0, 0)c(0,1,1)

“对24列进行计算非常麻烦”

医管局! 欢迎来到dplyr世界:

library(dplyr)
#generate dummy data
dummyDf <-read.table(text='Index   accountID   Jan Feb March
1:00    8887    36.44 75.00 185.24
2:00    13462   639.45 656.10 237.00
3:00    47249   0 24 2012
4:00    49528   1189.20 2326.26 1695.89
5:00    57201   24.67 0.00 0.00
6:00    57206   0.00 661.98 2957.68', header=TRUE, stringsAsFactors=FALSE) 

逐列突变

#the dot (.) argument refers to the focal column

df %>% mutate_at(3:5, funs(as.numeric(.>100)))

按预定义名称对列进行突变

changeVars =c("Jan","Feb","March")
df %>% mutate_at(.cols=changeVars, funs(as.numeric(.>100)))

如果满足某些条件,则对列进行突变

df %>%mutate_if(is.double,  funs(as.numeric(.>100)))

输出:

 Index accountID Jan Feb March
1  1:00      8887   0   0     1
2  2:00     13462   1   1     1
3  3:00     47249   0   0     1
4  4:00     49528   1   1     1
5  5:00     57201   0   0     0
6  6:00     57206   0   1     1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM