簡體   English   中英

R-將函數傳遞給dplyr變異的問題

[英]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")

您的行為的原因是因為ActivityLabelstbl_df 這導致mutate返回data.frame而不是data.frame的元素。 方法

[

從不簡化(丟棄),因此始終返回data.frame

因此,它為每一行返回一個數據幀,而不是單個值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM