screenshot我有一张桌子。第一行是id,第二行是value。该表有很多行。我只想拥有一个值的唯一ID。如果相同的ID同时具有负值和正值,则我将选择正值(1)并删除负值(0)。查看截图。如果您给我任何使用R,Python或Postgresql的解决方案,我都会很高兴。谢谢你的帮助!
hadm_id rass_v
100001 0
100003 0
100003 1
100006 0
100006 1
100007 0
100007 1
100009 0
100009 1
100010 0
100010 1
100011 0
100011 1
答案 0 :(得分:1)
在R
aggregate(rass_v~hadm_id, df, max)
# hadm_id rass_v
# 1 100001 0
# 2 100003 1
# 3 100006 1
# 4 100007 1
# 5 100009 1
# 6 100010 1
# 7 100011 1
答案 1 :(得分:0)
您可以为此使用熊猫:
import pandas as pd
d = {'hadmid': [1, 1, 2], 'rass_v': [3, -3, 4]}
df = pd.DataFrame(data=d)
boolean_mask = df.rass_v > 0
df = df[boolean_mask]
答案 2 :(得分:0)
欢迎您!
以下是使用R的几种可能性之一:
df <- data.frame(
hadm_id = c(100001, 100003, 100003, 100006, 100006, 100007, 100007,
100009, 100009, 100010, 100010, 100011, 100011),
rass_v = c(0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1)
)
# Edit: for better readability please use @Moody_Mudskipper's answer:
# df <- setNames(aggregate(df$rass_v, by = list(df$hadm_id), max), names(df))
df <- aggregate(rass_v~hadm_id, df, max)
print(df)
有关更多信息,请参见this。
这是更快的data.table解决方案(适用于较大的表):
library(data.table)
DT <- data.table(
hadm_id = c(100001, 100003, 100003, 100006, 100006, 100007, 100007,
100009, 100009, 100010, 100010, 100011, 100011),
rass_v = c(0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1)
)
DT <- DT[DT[, .I[which.max(rass_v)], by=hadm_id]$V1]
print(DT)
请查看与此相关的question和阿伦的答案。
结果:
hadm_id rass_v
1: 100001 0
2: 100003 1
3: 100006 1
4: 100007 1
5: 100009 1
6: 100010 1
7: 100011 1
编辑:这是等效的熊猫方式:
import pandas as pd
df = pd.DataFrame({'hadmid': [100001, 100003, 100003, 100006, 100006, 100007, 100007,
100009, 100009, 100010, 100010, 100011, 100011],
'rass_v': [0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1]})
df = df.groupby(['hadmid'], sort=False)['rass_v'].max()
print(df)
答案 3 :(得分:0)
我检查了一下并正确回答了。
DELETE FROM 'table_name' WHERE 'table_name'.hadm_id IN (
select hadm_id from (
SELECT count(hadm_id) c,
hadm_id
FROM 'table_name'
GROUP BY hadm_id
) foo
where foo.c = 2
)
and rass_v=0
答案 4 :(得分:0)
您可以使用tidyverse
通过分组然后按条件过滤轻松获得结果,仅保留n = 1的非0行。
df %>%
group_by(hadm_id) %>%
filter((n() > 1 & rass_v != 0) | (n() == 1))
结果:
print(df)
# A tibble: 7 x 2
# Groups: hadm_id [7]
hadm_id rass_v
<dbl> <dbl>
1 100001 0
2 100003 1
3 100006 1
4 100007 1
5 100009 1
6 100010 1
7 100011 1