R:从函数向数据框添加一个新列
R: add a new column to dataframes from a function
我有很多类似的问题:
dftest_tw <- structure(list(text = c("RT @BitMEXdotcom: A new high: US0M turnover in the last 24 hours, over 80% of it on $XBTUSD. Congrats to the team and thank you to our u…",
"RT @Crowd_indicator: Thank you for this nice video, @Nicholas_Merten",
"RT @Crowd_indicator: Review of #Cindicator by DataDash: t.co/D0da3u5y3V"
), Tweet.id = c("896858423521837057", "896858275689398272", "896858135314538497"
), created.date = structure(c(17391, 17391, 17391), class = "Date"),
created.week = c(33, 33, 33)), .Names = c("text", "Tweet.id",
"created.date", "created.week"), row.names = c(NA, -3L), class = c("tbl_df",
"tbl", "data.frame"))
为了测试,我们再添加一个:
dftest2_tw <- dftest_tw
我有我的 df 列表:
myUserList <- ls(,pattern = "_tw")
我想做的是:
1- 添加一个名为 Twitter.name
的新列
2- 用 df name 填充列,所有这些都在一个函数中。以下代码适用于逐一获取的每个 df:
dftest_tw %>% rowwise() %>% mutate(Twitter.name = myUserList[1])
想要的结果是这样的:
MyRes <- structure(list(text = c("RT @BitMEXdotcom: A new high: US0M turnover in the last 24 hours, over 80% of it on $XBTUSD. Congrats to the team and thank you to our u…",
"RT @Crowd_indicator: Thank you for this nice video, @Nicholas_Merten",
"RT @Crowd_indicator: Review of #Cindicator by DataDash: t.co/D0da3u5y3V"
), Tweet.id = c("896858423521837057", "896858275689398272", "896858135314538497"
), created.date = structure(c(17391, 17391, 17391), class = "Date"),
created.week = c(33, 33, 33), retweet = c(0, 0, 0), custom = c(0,
0, 0), Twitter.name = c("dftest_tw", "dftest_tw", "dftest_tw"
)), .Names = c("text", "Tweet.id", "created.date", "created.week",
"retweet", "custom", "Twitter.name"), class = c("rowwise_df",
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -3L))
当要写一个函数以后应用到我所有的df(超过100个)时,我无法实现。任何帮助将不胜感激。
我们可以使用 tidyverse
选项。使用 mget
获取多个字符串对象的值,然后使用 purrr
中的 map2
,在 list
的每个数据集中创建新列 'Twitter.name 并对应“myUserList”的字符串元素
library(tidyverse)
lst <- mget(myUserList) %>%
map2(myUserList, ~mutate(.data = .x, Twitter.name = .y))
如果我们需要修改全局环境中的对象,使用list2env
list2env(lst, envir = .GlobalEnv)
我有很多类似的问题:
dftest_tw <- structure(list(text = c("RT @BitMEXdotcom: A new high: US0M turnover in the last 24 hours, over 80% of it on $XBTUSD. Congrats to the team and thank you to our u…",
"RT @Crowd_indicator: Thank you for this nice video, @Nicholas_Merten",
"RT @Crowd_indicator: Review of #Cindicator by DataDash: t.co/D0da3u5y3V"
), Tweet.id = c("896858423521837057", "896858275689398272", "896858135314538497"
), created.date = structure(c(17391, 17391, 17391), class = "Date"),
created.week = c(33, 33, 33)), .Names = c("text", "Tweet.id",
"created.date", "created.week"), row.names = c(NA, -3L), class = c("tbl_df",
"tbl", "data.frame"))
为了测试,我们再添加一个:
dftest2_tw <- dftest_tw
我有我的 df 列表:
myUserList <- ls(,pattern = "_tw")
我想做的是:
1- 添加一个名为 Twitter.name
2- 用 df name 填充列,所有这些都在一个函数中。以下代码适用于逐一获取的每个 df:
dftest_tw %>% rowwise() %>% mutate(Twitter.name = myUserList[1])
想要的结果是这样的:
MyRes <- structure(list(text = c("RT @BitMEXdotcom: A new high: US0M turnover in the last 24 hours, over 80% of it on $XBTUSD. Congrats to the team and thank you to our u…",
"RT @Crowd_indicator: Thank you for this nice video, @Nicholas_Merten",
"RT @Crowd_indicator: Review of #Cindicator by DataDash: t.co/D0da3u5y3V"
), Tweet.id = c("896858423521837057", "896858275689398272", "896858135314538497"
), created.date = structure(c(17391, 17391, 17391), class = "Date"),
created.week = c(33, 33, 33), retweet = c(0, 0, 0), custom = c(0,
0, 0), Twitter.name = c("dftest_tw", "dftest_tw", "dftest_tw"
)), .Names = c("text", "Tweet.id", "created.date", "created.week",
"retweet", "custom", "Twitter.name"), class = c("rowwise_df",
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -3L))
当要写一个函数以后应用到我所有的df(超过100个)时,我无法实现。任何帮助将不胜感激。
我们可以使用 tidyverse
选项。使用 mget
获取多个字符串对象的值,然后使用 purrr
中的 map2
,在 list
的每个数据集中创建新列 'Twitter.name 并对应“myUserList”的字符串元素
library(tidyverse)
lst <- mget(myUserList) %>%
map2(myUserList, ~mutate(.data = .x, Twitter.name = .y))
如果我们需要修改全局环境中的对象,使用list2env
list2env(lst, envir = .GlobalEnv)