应用返回向量第一个元素的重复实例,而不是 R 中自定义函数计算的所有元素
sapply returning repeated instances of first element of vector instead of all elements calculated by custom function in R
考虑我的数据集中的以下列:
df$PT :包含具有重复模式的字符串。例子:
[1] "60D 0%" "5M 2%" "4 2ND M 5%" ...
df$date : 日期列
[1] "2021-01-18" "2021-01-18" "2021-01-18" ...
我设法创建了一个函数,它从上面的列中读取输入,对它们进行操作,returns 另一个日期(我们称之为 date2)。该函数运行良好(我通过手动传递参数对其进行了测试):
function1(时间,日期){
#if/else 从 PT
和 date
生成 date2
的链
#function returns (date2) 或 NA 根据 if/else 条件
}
到目前为止一切顺利。当我尝试使用 sapply 为 df$PT 列的每个术语应用我的 function1 并将输出(我想为 df$PT 中的每个术语的单个日期或 NA)存储在 df$new 中时,问题就来了-col,例如:
df$new_col <- sapply(df$PT,function1,date=df$date)
但是 df$new_col 中的预期输出并没有以日期格式显示为:
日期2a
日期2b
日期2c
日期2d
...
我只获得第一个在各处重复的输出,并且是日期的字符串格式:
18705
18705
18705
18705
...
这是怎么回事,我该如何解决才能正确计算 df$new_col 中的 date2?
感谢您的帮助!
因为 R 是矢量化的,所以您可以直接从现有列创建新的 df 列。例如:
cars <- mtcars
cars$new <- ifelse(cars$cyl == 6 & cars$mpg > 20, "NewVal", NA)
head(cars)
mpg cyl disp hp drat wt qsec vs am gear carb new
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 NewVal
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 NewVal
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 <NA>
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 NewVal
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 <NA>
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 <NA>
考虑我的数据集中的以下列:
df$PT :包含具有重复模式的字符串。例子: [1] "60D 0%" "5M 2%" "4 2ND M 5%" ...
df$date : 日期列 [1] "2021-01-18" "2021-01-18" "2021-01-18" ...
我设法创建了一个函数,它从上面的列中读取输入,对它们进行操作,returns 另一个日期(我们称之为 date2)。该函数运行良好(我通过手动传递参数对其进行了测试):
function1(时间,日期){
#if/else 从 PT
和 date
生成 date2
的链
#function returns (date2) 或 NA 根据 if/else 条件
}
到目前为止一切顺利。当我尝试使用 sapply 为 df$PT 列的每个术语应用我的 function1 并将输出(我想为 df$PT 中的每个术语的单个日期或 NA)存储在 df$new 中时,问题就来了-col,例如:
df$new_col <- sapply(df$PT,function1,date=df$date)
但是 df$new_col 中的预期输出并没有以日期格式显示为:
日期2a 日期2b 日期2c 日期2d ...
我只获得第一个在各处重复的输出,并且是日期的字符串格式: 18705 18705 18705 18705 ...
这是怎么回事,我该如何解决才能正确计算 df$new_col 中的 date2?
感谢您的帮助!
因为 R 是矢量化的,所以您可以直接从现有列创建新的 df 列。例如:
cars <- mtcars
cars$new <- ifelse(cars$cyl == 6 & cars$mpg > 20, "NewVal", NA)
head(cars)
mpg cyl disp hp drat wt qsec vs am gear carb new
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 NewVal
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 NewVal
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 <NA>
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 NewVal
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 <NA>
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 <NA>