【发布时间】:2023-03-20 15:15:01
【问题描述】:
我是 R 新手,我一直坚持这一点。我在下面有一个数据集,其中我创建了一个名为“amountOfTxn_array”的新数组列表变量,其中包含按顺序排列的三个数值。这些是从一月到三月的交易量。我的目标是从这个数组列表中创建新变量,迭代“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 obs。 4个变量: $ accountID : int 8887 13462 47249 49528 57201 57206 58522 79073 80465 81032 ... $ amountOfTxn_200501:数字 36.4 639.5 0 1189.2 24.7 ... $ amountOfTxn_200502: 数字 75 656 24 2326 0 ... $ amountOfTxn_200503: 数字 185 237 2012 1696 0 ... $ amountOfTxn_array :3176 的列表
此外,下面提供了一个用于创建新变量的示例代码,其中如果数组中的值大于 100,我想标记 1,否则标记 0。当我运行示例代码时,我得到“错误:(列表)对象不能被强制输入‘双’错误。我可以要求解决这个问题。我非常感谢任何回应。 谢谢!
> 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)
【问题讨论】:
-
我认为有一个问题,因为
myData_05_Array$amountOfTxn_array[i]你取了amoutOfTxn_array的第 i 行/条目,这是一个向量,在这种情况下,你将一个向量与100进行比较这会引发错误。也许您将此列拆分为 3 并比较每个元素 -
你能显示
str(myData_05_Array)的输出吗? -
另外,一般情况下,您可以使用
any()来检查其中的条件,例如vector:any(c(1:10) >5),因此您不必使用循环。 -
@wolf_wue 实际上,amoutOfTxn_array 是从代表 Jan、Feb 和 Mar 的 3 个原始列创建的。实际上,我的数据集中有 24 个列代表两年的每月数据。对 24 列进行计算非常麻烦,这就是为什么我正在探索其他选项,例如将这 24 列合并为一列作为数字列表。在这里,我只探索 3 个月的数据。我尝试通过索引值获取第 3 位和第 2 位之间的差异,它工作正常。接下来我想做的是对每个数据元素做一些逻辑操作。
-
嗨@JannaMaas,请看上面打印出来的str(myData_05_Array)。
标签: arrays r list loops for-loop