我有一个带有字母的数据框df
。df
的列号对应于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