[英]R - Problems passing a function to dplyr mutate
我正在嘗試更改包含數字的列,這樣將有一個對應於該數字的名稱代替該數字。
我正在使用dplyr
並且已讀取表並在其中使用了tbl_df
:
ActivityLabels<-tbl_df(read.table("./UCI HAR Dataset/activity_labels.txt",stringsAsFactors = FALSE))
這將返回此表:
> ActivityLabels
Source: local data frame [6 x 2]
V1 V2
(int) (chr)
1 1 WALKING
2 2 WALKING_UPSTAIRS
3 3 WALKING_DOWNSTAIRS
4 4 SITTING
5 5 STANDING
6 6 LAYING
現在,我有一個帶有數字的小型數據框,我想使用V2列將其替換為字符值。
我寫了以下函數:
GetActivityNamesFromActivityNumbers <- function(ActivityNumbers)
{
as.character(ActivityLabels[ActivityNumbers,2])
}
並手動工作:
> GetActivityNamesFromActivityNumbers(1)
[1] "WALKING"
> GetActivityNamesFromActivityNumbers(2)
[1] "WALKING_UPSTAIRS"
> GetActivityNamesFromActivityNumbers(c(1,2))
[1] "c(\"WALKING\", \"WALKING_UPSTAIRS\")"
>
但是以下mutate
無法正常工作:
> sample
Source: local data frame [6 x 1]
ActivityName
(int)
1 5
2 5
3 5
4 5
5 5
6 5
> sample %>% mutate(ActivityName = GetActivityNamesFromActivityNumbers(ActivityName))
Source: local data frame [6 x 1]
ActivityName
(chr)
1 c("STANDING", "STANDING", "STANDING", "STANDING", "STANDING", "STANDING")
2 c("STANDING", "STANDING", "STANDING", "STANDING", "STANDING", "STANDING")
3 c("STANDING", "STANDING", "STANDING", "STANDING", "STANDING", "STANDING")
4 c("STANDING", "STANDING", "STANDING", "STANDING", "STANDING", "STANDING")
5 c("STANDING", "STANDING", "STANDING", "STANDING", "STANDING", "STANDING")
6 c("STANDING", "STANDING", "STANDING", "STANDING", "STANDING", "STANDING")
>
我究竟做錯了什么 ? 當我嘗試傳遞log
等函數時, mutate
工作方式與我期望的一樣,但是對於我的函數卻沒有。
有人可以幫幫我嗎 ?
您想要的是一個簡單的合並
setNames(ActivityLabels, c("ActivityName", "ActivityNameLong"))
merge(sample, ActivityLabels, by = "ActivityName")
您的行為的原因是因為ActivityLabels
是tbl_df
。 這導致mutate
返回data.frame而不是data.frame的元素。 從方法 :
[
從不簡化(丟棄),因此始終返回data.frame
因此,它為每一行返回一個數據幀,而不是單個值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.