편집 : 내 df
창조 오타는 MediaName
의 마지막 값에 누락 된 _
로, 있었다 ; 이제 수정되었습니다.는 :: 제기 (tibble :: data_frame없이) 돌연변이 "평가 오류 : 문자가 아닌 인수"
난 세번째 변수 Phase
의 값에 따라 다른 변수 MediaName
의 값의 일부로서 데이터 프레임의 새로운 변수 TrialId
을 만들려 및 I는 dplyr::mutate
내에 strsplit
및 ifelse
을 사용하여 다음과 같이 그렇게 할 수 있다고 생각 : 나는 믿고 있기 때문에
> df$TrialId
[1] "A1" "B2" "A2" "B1" "A1" "B2" "A2" "B1" "HC" "TC" "RC"
되는 예상 결과는 그러나 이것은 012의 나에게 다음과 같은 오류를 제공
library(dplyr)
# Creating a simple data frame for the example
df <- data.frame(Phase = c(rep("Familiarisation",8),rep("Test",3)),
MediaName = c("Flip_A1_G1","Reg_B2_S1","Reg_A2_G1","Flip_B1_S1",
"Reg_A1_G2","Flip_B2_S2","Reg_A2_G2","Flip_B1_S2",
"HC_A1L","TC_B1R","RC_BL_2R"))
# Creating a new column
df <- df %>%
mutate(TrialId = ifelse(Phase == "Familiarisation",
sapply(strsplit(MediaName, "_"), "[", 2),
sapply(strsplit(MediaName, "_"), "[", 1)))
:
Error in mutate_impl(.data, dots) :
Evaluation error: non-character argument.
내가 쉽게이 문제를 해결 이유를 알 수없이 tibble::data_frame
으로,이 작은 예에서 정의하여 내 데이터 프레임을 내 문제를 해결할 수 this SO question 알고있다. 나는 실제 코드 df
에서와 마찬가지로 csv 파일 (read.csv()
)을 읽는 것으로부터 정확히 알 수는 없습니다. 나는 df <- df %>% as_tibble() %>% mutate(...)
을 사용하는 것이 비슷한 방식으로 문제를 해결할 것이라고 생각해 왔지만, 왜 그런가? (왜?).
실제로 파일을 읽을 때도 tibble
을 사용할 수 있습니까? 아니면 내가해야 할 일을 성취하기위한 다른 방법이 있는데, strsplit
을 사용하지 않고있을 수 있습니까?
나는 또한 tidyr::separate
을 사용할 수 있지만 Phase
의 값에 따라 첫 번째 또는 두 번째 값을 유지해야하므로 정확히 원하는 것을 수행하지 않습니다. this other SO question을 읽는 중입니다.
아마도 'factor'클래스가 있습니다. '문자 '로 변환 한 다음'ifelse'즉'df %> % mutate_all (으로.문자) %> %''mutate' 호출 전에 – akrun
젠장, 이건 너무 뻔한 느낌이어서 시도조차하지 못했지만 효과가있다 ... 왜'tibble :: data_frame'을 사용하는지 이해하는 데 관심이있다. 그것은 작동하지만 as_tibble을 사용하지는 않는다. –
주된 이유는'data_frame'은 기본적으로 모든 비 숫자 컬럼에 대해'character' 클래스를 제공하고'data.frame'을 사용하면'stringsAsFactors = TRUE'가 기본값입니다. ' 'as_tibble'을 사용하기 때문에'data.frame'에 의해 생성 된 컬럼 클래스를 변경하지 않습니다 – akrun