我有这种数据
dist = math.hypot(x2 - x1, y2 - y1)
我想减去"背景"的强度值。从样本A,B,C和D的强度值,并将值放在一个新列(可能使用mutate函数)。
另外,当我有两个不同的数据类型时,如:
Sample Name Type Intensity
1. A 1 16
2. B 1 12
3. C 1 13
4. D 1 10
5. Background 1 2
我想做同样的事情,但是从类型1的样本和样本类型2的类型2的背景中减去类型1的背景。
所以我会得到这样的东西:
Sample Name Type Intensity
1. A 1 16
2. B 1 12
3. C 1 13
4. D 1 10
5. Background 1 2
6. A 2 14
7. B 2 12
8. C 2 9
9. D 2 7
10. Background 2 3
答案 0 :(得分:4)
根据OP的示例,数据集似乎是data.table
。因此,我们使用data.table
方法。在按“类型”分组后,获取“强度”与“强度”的差异,我们将“Sample_Name”设置为“背景”并指定(:=
)它以创建“强度已修正”列
setDT(df2) #in case it is not data.table
df2[, IntensityCorrected := Intensity - Intensity[Sample_Name == "Background"], by = Type]
df2
# Sample_Name Type Intensity IntensityCorrected
# 1: A 1 16 14
# 2: B 1 12 10
# 3: C 1 13 11
# 4: D 1 10 8
# 5: Background 1 2 0
# 6: A 2 14 11
# 7: B 2 12 9
# 8: C 2 9 6
# 9: D 2 7 4
#10: Background 2 3 0
使用base R
,选项为ave
with(df2, Intensity - ave(Intensity*(Sample_Name == "Background"),
Type, FUN = function(x) x[x !=0]))
答案 1 :(得分:2)
df =read.table(text=" Sample Name Type Intensity
1. A 1 16
2. B 1 12
3. C 1 13
4. D 1 10
5. Background 1 2
6. A 2 14
7. B 2 12
8. C 2 9
9. D 2 7
10. Background 2 3", header=T)
替代dplyr
:
df %>% group_by(Type) %>%
mutate(Intensity.corrected = Intensity-Intensity[Name=="Background"][1])
输出:
Sample Name Type Intensity Intensity.corrected
1 1 A 1 16 14
2 2 B 1 12 10
3 3 C 1 13 11
4 4 D 1 10 8
5 5 Background 1 2 0
6 6 A 2 14 11
7 7 B 2 12 9
8 8 C 2 9 6
9 9 D 2 7 4
10 10 Background 2 3 0
希望这有帮助!