将命名的数值向量拆分为R中的不同元素
我在R中有一个命名数字向量,有2000多个命名数字。我想将数字大于1的每个元素拆分为数字所指示的元素数,最后只包含数字1。但重要的是,也要按照输出中的指示更改名称 输入:将命名的数值向量拆分为R中的不同元素,r,R,我在R中有一个命名数字向量,有2000多个命名数字。我想将数字大于1的每个元素拆分为数字所指示的元素数,最后只包含数字1。但重要的是,也要按照输出中的指示更改名称 输入: obj<- c(3,1,1,1,6,1,1,1,1,1,1,1,1,3) names(obj)<- c("V4","V10","V12","V15","V16","V20","V21&q
obj<- c(3,1,1,1,6,1,1,1,1,1,1,1,1,3)
names(obj)<- c("V4","V10","V12","V15","V16","V20","V21","V22","V23","V36","V39","V40","V41","V42")
>obj
V4 V10 V12 V15 V16 V20 V21 V22 V23 V36 V39 V40 V41 V42
3 1 1 1 6 1 1 1 1 1 1 1 1 3
obj这里有一个基本的R方法:
#Repeat each value in obj, obj number of times
res <- rep(obj, obj)
#Change all values to 1.
res[] <- 1
#Change the names
names(res) <- ave(names(res), names(res), FUN = function(x)
if(length(x) == 1) x else paste(x, seq_along(x), sep = '_'))
res
# V4_1 V4_2 V4_3 V10 V12 V15 V16_1 V16_2 V16_3 V16_4 V16_5 V16_6
# 1 1 1 1 1 1 1 1 1 1 1 1
# V20 V21 V22 V23 V36 V39 V40 V41 V42_1 V42_2 V42_3
# 1 1 1 1 1 1 1 1 1 1 1
#重复obj、obj中的每个值数次
res利用purr
的一个选项可以是:
imap(obj[obj > 1], ~ set_names(rep(1, .x), paste(.y, 1:.x, sep = "_"))) %>%
reduce(c) %>%
c(., obj[obj == 1])
V4_1 V4_2 V4_3 V16_1 V16_2 V16_3 V16_4 V16_5 V16_6 V42_1 V42_2 V42_3 V10 V12
1 1 1 1 1 1 1 1 1 1 1 1 1 1
V15 V20 V21 V22 V23 V36 V39 V40 V41
1 1 1 1 1 1 1 1 1
#Repeat each value in obj, obj number of times
res <- rep(obj, obj)
#Change all values to 1.
res[] <- 1
#Change the names
names(res) <- ave(names(res), names(res), FUN = function(x)
if(length(x) == 1) x else paste(x, seq_along(x), sep = '_'))
res
# V4_1 V4_2 V4_3 V10 V12 V15 V16_1 V16_2 V16_3 V16_4 V16_5 V16_6
# 1 1 1 1 1 1 1 1 1 1 1 1
# V20 V21 V22 V23 V36 V39 V40 V41 V42_1 V42_2 V42_3
# 1 1 1 1 1 1 1 1 1 1 1
imap(obj[obj > 1], ~ set_names(rep(1, .x), paste(.y, 1:.x, sep = "_"))) %>%
reduce(c) %>%
c(., obj[obj == 1])
V4_1 V4_2 V4_3 V16_1 V16_2 V16_3 V16_4 V16_5 V16_6 V42_1 V42_2 V42_3 V10 V12
1 1 1 1 1 1 1 1 1 1 1 1 1 1
V15 V20 V21 V22 V23 V36 V39 V40 V41
1 1 1 1 1 1 1 1 1