R - 删除具有相同值的行和具有相同值组合的行
R - Remove rows with same values AND rows with same combinations of values
我有一些数据如下所示:
Row From To Value
1 MA1007 MA1007 2
2 MA1007 MA2801 1
3 MA2801 MA1017 1
4 MA1051 MA2066 2
5 MA1051 MA2059 1
6 MA2066 MA1051 2
7 MA2066 MA2066 1
我想删除 From
和 To
列中值相同的所有行。在上面的示例中,这意味着第 1 行和第 7 行将被删除。但是,我还想删除 From
和 To
列中的值组合多次出现的任何行(仅保留该行的一个实例)。例如,第 2 行或第 3 行将被删除(它们都包含相同的“MA”代码组合,尽管在不同的列中)。第 4 行或第 6 行也将被删除。如果有任何不同,Value
列对于特定组合也将具有相同的值。例如。第 2 行和第 3 行具有相同的值,第 4 行和第 6 行也是如此。
最终数据应如下所示:
Row From To Value
2 MA1007 MA2801 1
4 MA1051 MA2066 2
5 MA1051 MA2059 1
关于我应该如何处理这个问题有什么想法吗?谢谢:)
我们可以使用 subset
创建一个表达式,其中 'From' 值不等于 (!=
) 到 'To' 和 (&
) 其中它不是 (!
) duplicated
for 'From', 'To', 在 sort
按 pmin/pmax
行后
subset(df1, From != To & !duplicated(cbind(pmin(From, To), pmax(From, To))))
-输出
Row From To Value
2 2 MA1017 MA2801 1
4 4 MA1051 MA2066 2
5 5 MA1051 MA2059 1
数据
df1 <- structure(list(Row = 1:7, From = c("MA1007", "MA1017", "MA2801",
"MA1051", "MA1051", "MA2066", "MA2066"), To = c("MA1007", "MA2801",
"MA1017", "MA2066", "MA2059", "MA1051", "MA2066"), Value = c(2L,
1L, 1L, 2L, 1L, 2L, 1L)), class = "data.frame", row.names = c(NA,
-7L))
使用 simplify
+ graph_from_data_frame
+ get.data.frame
的 igraph
选项
merge(
setNames(get.data.frame(
simplify(
graph_from_data_frame(df[-1], directed = FALSE),
edge.attr.comb = "mean"
)
), names(df)[-1]),
df
)
给予
From To Value Row
1 MA1017 MA2801 1 2
2 MA1051 MA2059 1 5
3 MA1051 MA2066 2 4
我有一些数据如下所示:
Row From To Value
1 MA1007 MA1007 2
2 MA1007 MA2801 1
3 MA2801 MA1017 1
4 MA1051 MA2066 2
5 MA1051 MA2059 1
6 MA2066 MA1051 2
7 MA2066 MA2066 1
我想删除 From
和 To
列中值相同的所有行。在上面的示例中,这意味着第 1 行和第 7 行将被删除。但是,我还想删除 From
和 To
列中的值组合多次出现的任何行(仅保留该行的一个实例)。例如,第 2 行或第 3 行将被删除(它们都包含相同的“MA”代码组合,尽管在不同的列中)。第 4 行或第 6 行也将被删除。如果有任何不同,Value
列对于特定组合也将具有相同的值。例如。第 2 行和第 3 行具有相同的值,第 4 行和第 6 行也是如此。
最终数据应如下所示:
Row From To Value
2 MA1007 MA2801 1
4 MA1051 MA2066 2
5 MA1051 MA2059 1
关于我应该如何处理这个问题有什么想法吗?谢谢:)
我们可以使用 subset
创建一个表达式,其中 'From' 值不等于 (!=
) 到 'To' 和 (&
) 其中它不是 (!
) duplicated
for 'From', 'To', 在 sort
按 pmin/pmax
subset(df1, From != To & !duplicated(cbind(pmin(From, To), pmax(From, To))))
-输出
Row From To Value
2 2 MA1017 MA2801 1
4 4 MA1051 MA2066 2
5 5 MA1051 MA2059 1
数据
df1 <- structure(list(Row = 1:7, From = c("MA1007", "MA1017", "MA2801",
"MA1051", "MA1051", "MA2066", "MA2066"), To = c("MA1007", "MA2801",
"MA1017", "MA2066", "MA2059", "MA1051", "MA2066"), Value = c(2L,
1L, 1L, 2L, 1L, 2L, 1L)), class = "data.frame", row.names = c(NA,
-7L))
使用 simplify
+ graph_from_data_frame
+ get.data.frame
igraph
选项
merge(
setNames(get.data.frame(
simplify(
graph_from_data_frame(df[-1], directed = FALSE),
edge.attr.comb = "mean"
)
), names(df)[-1]),
df
)
给予
From To Value Row
1 MA1017 MA2801 1 2
2 MA1051 MA2059 1 5
3 MA1051 MA2066 2 4