使用Apply系列创建新列

马克西

在我的数据框中,我有一个字符列。我想使用自己编写的函数从现有字符列创建一个新列。

我的功能

lat_finder <- function(coord){
return(as.numeric(substr(strsplit(coord,",")[[1]][1],2,10)))}

测试数据框

test <- data.frame('loc' = c("(37.7862913318072, -122.401375181471)","(37.7646938184545, -122.449439257453)","(37.7860078381928, -122.430650176965)"))

我正在尝试

test['Lat'] <- lapply(test['loc'],lat_finder)

结果是一个新列,但仅包含第一行的功能结果,即第一纬度应为37.786 ...,这是新列中每一行的值。我知道for循环会像我之前做的那样工作,但是要花很多时间,所以我真的想加快速度。我敢肯定,很明显我在这里缺少了一些东西,因此,除了一个修复程序之外,我还希望对我的代码按原样进行的解释表示感谢。

亚历克斯

初步说明-由于您对data.frame的调用缺少stringsAsFactors = FALSE,因此您正在将输入字符串转换为一个因数,这使得问题在您陈述时不再重复。就是说,我认为这可能只是测试代码中的问题,而不是实际问题的根源,我将其添加到这里:

test_f <- data.frame('loc' = c("(37.7862913318072, -122.401375181471)",
                           "(37.7646938184545, -122.449439257453)",
                           "(37.7860078381928, -122.430650176965)"),
                 stringsAsFactors = FALSE)

话虽如此,您的根本问题是提取列“ loc”的方式。这个方括号,字符串名选择拉出一个单列数据框:

> your_pull <- test_f['loc']
> your_pull
                                    loc
1 (37.7862913318072, -122.401375181471)
2 (37.7646938184545, -122.449439257453)
3 (37.7860078381928, -122.430650176965)
> typeof(your_pull)
[1] "list"
> class(your_pull)
[1] "data.frame"

lapply期望向量作为输入,您可以使用经典$记号获得:

> dollar_pull <- test_f$loc
> dollar_pull
[1] "(37.7862913318072, -122.401375181471)" "(37.7646938184545, -122.449439257453)"
[3] "(37.7860078381928, -122.430650176965)"
> typeof(dollar_pull)
[1] "character"
> class(dollar_pull)
[1] "character"

该函数调用现在可以正常工作(预期您会得到一个可能需要向量的列表-请参阅下面的附带说明):

> lapply(test_f$loc,lat_finder)
[[1]]
[1] 37.78629

[[2]]
[1] 37.76469

[[3]]
[1] 37.78601

附带的几点:

1)将新列$指定为一个好主意

2)您可能想要使用sapply或vapply,这将产生一个向量,而不是新data.frame列的列表。

3)您可能想放弃Hadley Wickham的purr申请家庭。供参考,这里的电话是purrr::map_chr(test_f$loc, you_function)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用IF和Apply函数创建新列

使用(d)plyr创建一系列新列

使用Pandas df.apply创建新列

基于系列条件创建新的熊猫列

如何使用系列。apply() 创建条件熊猫系列?

两次使用apply()创建新列会导致覆盖新列

使用if-else创建新列时出现熊猫错误:系列的真值不明确

如何使用熊猫数据框的特定行和列来创建新系列?

使用 DataFrame.apply 使用 Pandas 中的特定列创建一个新列

使用熊猫系列添加新列

Pandas DataFrame.apply:使用来自两列的数据创建新列

使用apply函数系列而不是循环从单行创建长序列

Pandas 使用 map 或 apply 从使用字典的调整中创建一个新列

使用 apply 使用每行的非空值创建一个新列

使用R中的Apply系列将2列数据帧的每一行传递给我创建的函数?

ValueError:在创建新列时,系列的真值不明确

Python Pandas-使用Apply功能并在DataFrame中创建新列

如何使用 apply 在 pandas 中创建新列来解决错误?

使用apply()自定义函数创建新列时的Pandas内存错误

使用apply函数在pandas中创建一个具有舍入值的新列

Python数据框:使用If Then Else逻辑有条件地创建新列->“系列的真值不明确”

使用 for 循环创建新列

使用 mutate 创建新列

如何使用 if 创建新列

使用条件创建新列

使用apply和gregexpr添加新列

努力尝试创建新系列

使用apply()基于函数创建两列

使用列标题创建的新列