특정 문자열과 일치하는 여러 열의 값을 기반으로 새 열을 만드는 방법은 무엇입니까?

특정 문자열과 일치하는 여러 열의 값을 기반으로 새 열을 만드는 방법은 무엇입니까?

내 데이터프레임은 다음과 같습니다.

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
> 

논리 값 TRUEFALSE숫자로 변환 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가 필요합니다. 원하거나 필요한 경우 쉼표를 추가할 수 있습니다.

관련 정보