내 데이터프레임은 다음과 같습니다.
df=data.frame(
eye_problemsdisorders_f6148_0_1=c("A","C","D",NA,"D","A","C",NA,"B","A"),
eye_problemsdisorders_f6148_0_2=c("B","C",NA,"A","C","B",NA,NA,"A","D"),
eye_problemsdisorders_f6148_0_3=c("C","A","D","D","B","A",NA,NA,"A","B"),
eye_problemsdisorders_f6148_0_4=c("D","D",NA,"B","A","C",NA,"C","A","B"),
eye_problemsdisorders_f6148_0_5=c("C","C",NA,"D","B","C",NA,"D","D","B")
실제로 "eye_problemsdisorders_f6148" 문자열과 항상 일치하지 않는 열과 더 많은 행이 있습니다.
내가 원하는 것은 "case"라는 새 열을 만드는 것입니다. 여기서 문자열 "A"가 모든 열에서 적어도 한 번 발생하는 모든 행은 값 "1"을 가지며, 그렇지 않은 경우 값은 "0"이 됩니다. " . 따라서 위의 예에서 "case" 열의 값은 1,1,0,1,1,1,0,0,1,1입니다.
답변1
주어진
> df=data.frame(
+ eye_problemsdisorders_f6148_0_1=c("A","C","D",NA,"D","A","C",NA,"B","A"),
+ eye_problemsdisorders_f6148_0_2=c("B","C",NA,"A","C","B",NA,NA,"A","D"),
+ eye_problemsdisorders_f6148_0_3=c("C","A","D","D","B","A",NA,NA,"A","B"),
+ eye_problemsdisorders_f6148_0_4=c("D","D",NA,"B","A","C",NA,"C","A","B"),
+ eye_problemsdisorders_f6148_0_5=c("C","C",NA,"D","B","C",NA,"D","D","B")
+ )
그 다음에
> f = function(x) any(x == "A", na.rm = TRUE)
>
> apply(df, MARGIN = 1, FUN = f)
[1] TRUE TRUE FALSE TRUE TRUE TRUE FALSE FALSE TRUE TRUE
>
논리 값 TRUE
을 FALSE
숫자로 변환 1
하고 0
새 열로 추가합니다.
> df$case <- as.numeric(apply(df, MARGIN = 1, FUN = f))
>
>
> df
eye_problemsdisorders_f6148_0_1 eye_problemsdisorders_f6148_0_2
1 A B
2 C C
3 D <NA>
4 <NA> A
5 D C
6 A B
7 C <NA>
8 <NA> <NA>
9 B A
10 A D
eye_problemsdisorders_f6148_0_3 eye_problemsdisorders_f6148_0_4
1 C D
2 A D
3 D <NA>
4 D B
5 B A
6 A C
7 <NA> <NA>
8 <NA> C
9 A A
10 B B
eye_problemsdisorders_f6148_0_5 case
1 C 1
2 C 1
3 <NA> 0
4 D 1
5 B 1
6 C 1
7 <NA> 0
8 D 0
9 D 1
10 B 1
답변2
다시 짧은 답변에 투표하겠습니다. 하지만 여기에 하나가 있습니다.
awk '{if ($0 ~ /A/) {printf 1} else {printf 0}}' datafile
awk가 줄 바꿈을 인쇄하기 때문에 여기에 printf가 필요합니다. 원하거나 필요한 경우 쉼표를 추가할 수 있습니다.