如何检查数据框中是否存在元素,以及是否存在向 R 中的另一个数据框添加值



我有一个带有字母的数据框dfdf的列号对应于df2的行号。df2的"结束"列包括df的第 15:25 行。

我想检查任何列df的第 16 行中是否有"D"。如果有"D",则在相应行的df2$End中添加 1。 例如,df的 [16,2] 中有"D",那么我想在 [2,3]df2中添加 1

df 
V1 V2 V3 V4 V5 V6 V7 V8
1   A  V  S  A  S  Y  A  E
2   S  K  E  S  V  E  K  Q
3   R  R  G  E  A  L  Q  A
4   A  K  P  A  T  V  E  L
5   G  R  G  S  Q  P  A  Q
6   E  R  R  K  C  R  N  L
7   A  S  P  K  D  L  P  D
8   E  E  V  K  P  P  T  F
9   E  D  L  V  E  G  L  T
10  R  A  E  D  E  E  E  Y
11  I  F  Y  N  I  S  Y  Q
12  P  I  I  I  W  V  A  K
13  M  T  E  D  V  F  A  L
14  I  I  L  L  L  Q  L  Q
15  S  S  V  T  S  I  V  V
16  P  D  S  I  D  D  D  D
17  S  S  S  E  S  D  D  M
18  -  D  D  S  D  E  D  N
19  -  G  D  S  -  N  S  R
20  -  E  E  S  -  E  P  E
21  -  E  E  D  -  D  S  I
22  -  P  P  E  -  T  D  G
23  -  K  S  E  -  T  E  K
24  -  E  T  E  -  S  P  -
25  -  E  S  D  -  E  K  -
df2
V1       V2         V3
categ    Start    Middle      End
V1       4.125    1.775      1.125
V2       5.875    1.250      3.875
V3       2.600    1.600      1.375
V4        8.75     1.50       2.25
V5       4.375    1.500      1.000
V6       2.650    1.300      2.875
V7       3.250    1.375      1.000
V8       1.525    2.000      2.625
dput(df)
structure(list(V1 = c("A", "S", "R", "A", "G", "E", "A", "E", 
"E", "R", "I", "P", "M", "I", "S", "P", "S", "-", "-", "-", "-", 
"-", "-", "-", "-"), V2 = c("V", "K", "R", "K", "R", "R", "S", 
"E", "D", "A", "F", "I", "T", "I", "S", "D", "S", "D", "G", "E", 
"E", "P", "K", "E", "E"), V3 = c("S", "E", "G", "P", "G", "R", 
"P", "V", "L", "E", "Y", "I", "E", "L", "V", "S", "S", "D", "D", 
"E", "E", "P", "S", "T", "S"), V4 = c("A", "S", "E", "A", "S", 
"K", "K", "K", "V", "D", "N", "I", "D", "L", "T", "I", "E", "S", 
"S", "S", "D", "E", "E", "E", "D"), V5 = c("S", "V", "A", "T", 
"Q", "C", "D", "P", "E", "E", "I", "W", "V", "L", "S", "D", "S", 
"D", "-", "-", "-", "-", "-", "-", "-"), V6 = c("Y", "E", "L", 
"V", "P", "R", "L", "P", "G", "E", "S", "V", "F", "Q", "I", "D", 
"D", "E", "N", "E", "D", "T", "T", "S", "E"), V7 = c("A", "K", 
"Q", "E", "A", "T", "P", "T", "L", "E", "Y", "V", "I", "L", "V", 
"D", "D", "D", "S", "P", "S", "D", "E", "P", "K"), V8 = c("E", 
"Q", "A", "L", "Q", "L", "D", "F", "T", "Y", "Q", "V", "E", "Q", 
"V", "D", "M", "N", "R", "E", "I", "G", "K", "-", "-")), class = "data.frame", row.names = c(NA, 
-25L))
dput(df2)
structure(list(V1 = c("Start", "4.125", "5.875", "2.600", 
"8.75", "4.375", "2.650", "3.250", "1.525"), V2 = c("Middle", 
"1.775", "1.250", "1.600", "1.50", "1.500", "1.300", "1.375", 
"2.000"), V3 = c("End", "1.125", "3.875", "1.375", "2.25", 
"1.000", "2.875", "1.000", "2.625")), class = "data.frame", row.names = c("categ", 
"V1", "V2", "V3", "V4", "V5", "V6", "V7", "V8"))

所需的输出将是:

df3
V1       V2         V3
categ    Start    Middle      End
V1       4.125    1.775      1.125
V2       5.875    1.250      4.875
V3       2.600    1.600      1.375
V4        8.75     1.50       2.25
V5       4.375    1.500      2.000
V6       2.650    1.300      3.875
V7       3.250    1.375      2.000
V8       1.525    2.000      3.625

我尝试了以下方法:

if (df[16,] == "D") {
df2 + 1
print(df2)
}

我收到此警告消息:

Warning message:
In if (df[16, ] == "D") { :
the condition has length > 1 and only the first element will be used

由于第一行,所有值都变为字符df2。你想这样做吗?

df2$V3[-1] <- as.numeric(df2$V3[-1]) + 1 * +(df[16, ] == 'D')
df2
#         V1     V2    V3
#categ Start Middle   End
#V1    4.125  1.775 1.125
#V2    5.875  1.250 4.875
#V3    2.600  1.600 1.375
#V4     8.75   1.50  2.25
#V5    4.375  1.500     2
#V6    2.650  1.300 3.875
#V7    3.250  1.375     2
#V8    1.525  2.000 3.625

相关内容

最新更新