2012-04-16 3 views
1

데이터 정리 프로세스의 속도를 높이기 위해 함수를 사용하려고합니다. 그 날을 위해 "- 안돼"열이 나는 기능을 사용 할 생각이라고 1.함수에 부분 열 이름 전달

df1 = data.frame (identifier = c(1:4), mon.no = c(1,NA,NA,NA),mon.am = c(2,1,NA,3),mon.pm = c(3,4,NA,5), tues.no = c(NA,NA,1,NA),tues.am = c(2,3,1,4),tues.pm = c(3,3,2,3))

의 값이있는 경우의 예 표시에서 나는 날 오전과 오후 컬럼에보고 된 값을 제거하기 위해 사용하는 찾고 있어요 데이터 정리 :

clean1 = function (day) { 
df1$day.am[df1$day.no==1] = NA 
df1$day.pm[df1$day.no==1] = NA 
return (df1)} 
df2 = clean1(mon) 

그러나이 오류는 다음과 같은 오류를 반환합니다.

Error in `$<-.data.frame`(`*tmp*`, "day.am", value = logical(0)) : 
replacement has 0 rows, data has 4 

이 함수는 전체 열 이름을 예상하고 텍스트 입력 주위에 간격을 채울 수 없기 때문에 발생한다고 생각합니다. 그런 식으로 함수를 사용할 수 있습니까?

these notes을 읽었을 때 내 데이터를 깔끔한 형식으로 유지하는 것이 더 좋을 것이라고 생각하며 내 데이터를 재구성하는 솔루션을 개발 중입니다. 그러나 데이터가 원래 형식 인 동안이 작업을 수행하는 것이 또한 편리 할 것입니다.

감사합니다.

+0

아니요. 당신이 그것에 몬을 전달하고 있기 때문에 그것이 무엇인지 모릅니다. 함수에 객체 또는 문자열을 전달해야합니다. 몽도 아니다. 그래서 당신은 하루의 논쟁을 가지지 만, 실제로는 하루 인수를 사용하지 마십시오. –

+0

'grep' 가족 중에 뭔가있는 것이 있다고 생각합니다. –

답변

1

정말 가깝습니다. 댓글의 @Tyler Rinker가 왜 작동하지 않는지 설명했습니다. 수정 방법은 다음과 같습니다.

clean1 = function (day) { 
    day.am = paste(day, "am", sep=".") # make a string from the variable day and the suffixes 
    day.pm = paste(day, "pm", sep=".") 
    day.no = paste(day, "no", sep=".") 
    df1[day.am][df1[day.no]==1] = NA 
    df1[day.pm][df1[day.no]==1] = NA 
    return (df1)} 

df2 = clean1("mon") # "mon" should be a string 

다른 사람이이 작업을보다 효율적으로 수행 할 수 있습니다. 원래 df1에서 일하는 것뿐입니다. 지금 실행하면

df3 = clean1("tues") 

두 개의 요일을 모두 지우지 않은 데이터 프레임을 얻을 수 없습니다. 함수에 적용 할 데이터 프레임을 제공하여이 문제를 해결할 수 있습니다.

clean2 = function(df, day){... 
+0

안녕하세요, 귀하의 답변을 주셔서 감사합니다. 나는 그것을 실제 데이터로 테스트 할 것이고 (보다 효율적인 해결책이 제시되지 않는 한) 나는 그것을 받아 들일 것이다. – BuckyOH

+0

또한 편집 해 주셔서 감사합니다. 실제로 나는 깔끔함을 위해 df1을 매번 덮어 쓸 계획이다. 그러나이 방법으로 data.frame 및 열을 지정하면 하위 집합으로 작업 할 때 유용합니다. – BuckyOH