R 将列分为两组。一个数字有小数,另一个只有绝对数
我有以下资料: 我想对这些数据求和(例如字母A-E)。对于绝对值,这很容易。然而,对于百分比,我需要考虑权重。因此,我想将具有小数位数(百分比)的列与不具有小数位数的列分开 百分比列应允许有绝对数和小数。但绝对值列中不允许有小数点 我该怎么做R 将列分为两组。一个数字有小数,另一个只有绝对数,r,R,我有以下资料: 我想对这些数据求和(例如字母A-E)。对于绝对值,这很容易。然而,对于百分比,我需要考虑权重。因此,我想将具有小数位数(百分比)的列与不具有小数位数的列分开 百分比列应允许有绝对数和小数。但绝对值列中不允许有小数点 我该怎么做 DT <- structure(list(Letters = c("A", "B", "C", "D", "E"), Percentage = c(0
DT <- structure(list(Letters = c("A", "B", "C", "D", "E"), Percentage = c(0.67,
0.2, 0.4, 0.2, 0), Absolute_number = c(1000, 200, 0, -199, 1),
PercentageII = c(65.2, 1.2, 22.8, 4, 0), weights = c(2, 3,
3, 1, 8)), row.names = c(NA, -5L), class = c("tbl_df", "tbl",
"data.frame"))
Letters Percentage Absolute_number PercentageII weights
<chr> <dbl> <dbl> <dbl> <dbl>
1 A 0.67 1000 65.2 2
2 B 0.2 200 1.2 3
3 C 0.4 0 22.8 3
4 D 0.2 -199 4 1
5 E 0 1 0 8
DT使用过滤器
:
DT1 <- Filter(function(x) is.character(x) || all(x %% 1 == 0), DT)
DT2 <- Filter(function(x) is.character(x) || any(x %% 1 != 0), DT)
DT1
# A tibble: 5 x 3
# Letters Absolute_number weights
# <chr> <dbl> <dbl>
#1 A 1000 2
#2 B 200 3
#3 C 0 3
#4 D -199 1
#5 E 1 8
DT2
# A tibble: 5 x 3
# Letters Percentage PercentageII
# <chr> <dbl> <dbl>
#1 A 0.67 65.2
#2 B 0.2 1.2
#3 C 0.4 22.8
#4 D 0.2 4
#5 E 0 0
DT1我已经添加了预期的输出。效果非常好!
DT1 <- Filter(function(x) is.character(x) || all(x %% 1 == 0), DT)
DT2 <- Filter(function(x) is.character(x) || any(x %% 1 != 0), DT)
DT1
# A tibble: 5 x 3
# Letters Absolute_number weights
# <chr> <dbl> <dbl>
#1 A 1000 2
#2 B 200 3
#3 C 0 3
#4 D -199 1
#5 E 1 8
DT2
# A tibble: 5 x 3
# Letters Percentage PercentageII
# <chr> <dbl> <dbl>
#1 A 0.67 65.2
#2 B 0.2 1.2
#3 C 0.4 22.8
#4 D 0.2 4
#5 E 0 0