在R中的标头上运行forloop
我正在尝试从stata切换到R,需要forloop的帮助 背景:在R中的标头上运行forloop,r,R,我正在尝试从stata切换到R,需要forloop的帮助 背景: 我有数据(调查问卷),有5个模块,每个模块有10个问题。这里有一个想法。将数据框拆分为问题列表,并映射到列表中的每个元素 示例数据:三个模块和两个问题 df <- data.frame(B1B1 = c(1,2, rep(NA, 4)), B1B2 = c(3,4, rep(NA, 4)), B2B1 = c(NA,NA,5,6,NA,NA),
我有数据(调查问卷),有5个模块,每个模块有10个问题。这里有一个想法。将数据框拆分为问题列表,并映射到列表中的每个元素 示例数据:三个模块和两个问题
df <- data.frame(B1B1 = c(1,2, rep(NA, 4)),
B1B2 = c(3,4, rep(NA, 4)),
B2B1 = c(NA,NA,5,6,NA,NA),
B2B2 = c(NA,NA,7,8,NA,NA),
B3B1 = c(rep(NA,4), 1,2),
B3B2 = c(rep(NA,4), 3,4))
B1B1 B1B2 B2B1 B2B2 B3B1 B3B2
1 1 3 NA NA NA NA
2 2 4 NA NA NA NA
3 NA NA 5 7 NA NA
4 NA NA 6 8 NA NA
5 NA NA NA NA 1 3
6 NA NA NA NA 2 4
结果:
library(tidyverse)
split.default(df, str_extract(names(df), "..$")) %>%
map_df(~ coalesce(!!! .x))
# A tibble: 6 x 2
B1 B2
<dbl> <dbl>
1 1 3
2 2 4
3 5 7
4 6 8
5 1 3
6 2 4
#一个tible:6x2
B1 B2
1 1 3
2 2 4
3 5 7
4 6 8
5 1 3
6 2 4
你说的块是什么意思?您可以添加数据(使用?dput
函数)并指定您要实现的格式吗?我所说的块只是指将其拆分为不同的变量。我想我的措辞很糟糕,但是我的数据被分成了5个变量,我试图用ifelse语句将它们组合成1个,我需要在10个集合上循环,所以你有5个数据帧(命名为“b1b1b1”、…、“B5B1”),每个数据帧有10列(每个数据帧/I分别命名为“BiB1”、…、“BiB10”),你想按行连接它们吗?它们都在同一个df中。只是DF中的不同列,我试图将它们合并为1。他们混合了数据和NA(其他变量都有数据)B1B1 1 NA 2 NA 3 NA 4 NA 5 NA 6 NA 7 NA 8 NA 9 NA 10 2 B2B1 2 1 3 NA 4 NA 5 2 6 NA 7 2你能编辑帖子并包含你的数据吗?复制并粘贴来自dput(df)
的输出,其中df
是您的数据帧。
forvalues i=1(1)10{
gen b`i'=B1B`i' if B1B`i' != .
replace b`i'=B2B`i' if B2B`i' != .
replace b`i'=B3B`i' if B3B`i' != .
replace b`i'=B4B`i' if B4B`i' != .
replace b`i'=B5B`i' if B5B`i' != .
}
df <- data.frame(B1B1 = c(1,2, rep(NA, 4)),
B1B2 = c(3,4, rep(NA, 4)),
B2B1 = c(NA,NA,5,6,NA,NA),
B2B2 = c(NA,NA,7,8,NA,NA),
B3B1 = c(rep(NA,4), 1,2),
B3B2 = c(rep(NA,4), 3,4))
B1B1 B1B2 B2B1 B2B2 B3B1 B3B2
1 1 3 NA NA NA NA
2 2 4 NA NA NA NA
3 NA NA 5 7 NA NA
4 NA NA 6 8 NA NA
5 NA NA NA NA 1 3
6 NA NA NA NA 2 4
library(tidyverse)
split.default(df, str_extract(names(df), "..$")) %>%
map_df(~ coalesce(!!! .x))
# A tibble: 6 x 2
B1 B2
<dbl> <dbl>
1 1 3
2 2 4
3 5 7
4 6 8
5 1 3
6 2 4