我需要循环R data.frame中的因子级别。在循环内部,我需要对包含由这些级别对定义的子集的data.frames进行操作。这两对是该因子的两个连续唯一级别。
这是我尝试过的一个例子:
require(dplyr)
df <- data.frame(fac = rep(c("A", "B", "C"), 3))
for(i in levels(fac)){
if(i != levels(fac)[length(levels(fac))]){
df %>% filter(fac %in% c(i, i + 1))
}
}
我尝试将级别i
及其后续级别包括在内,但显然表达式i + 1
不会起作用。怎么解决这个问题?我是否必须使用变量fac
数字或是否有更简洁的解决方案?
编辑:输出(对于此示例)应该是这两个data.frames:
dfAB <- df %>% filter(fac %in% c("A", "B"))
dfBC <- df %>% filter(fac %in% c("B", "C"))
答案 0 :(得分:3)
问题是,你遍历所有级别的fac,这是一个字符向量,因此R
不能将{1}添加到i
。
以下作品:
library(dplyr)
df <- data.frame(fac = rep(c("A", "B", "C"), 3))
df <- df %>%
mutate(fac = factor(fac, levels = c("A", "B", "C")))
for(i in seq_along(levels(df$fac))){
if(i != length(levels(df$fac))){
df %>% filter(fac %in% c(levels(fac)[i], levels(fac)[i+1])) %>% print()
}
}
# fac
# 1 A
# 2 B
# 3 A
# 4 B
# 5 A
# 6 B
# fac
# 1 B
# 2 C
# 3 B
# 4 C
# 5 B
# 6 C
fac
列必须是factor
(否则过滤不起作用)。
我在循环中添加了print()
来打印结果,但您可能希望将其存储在某处(例如在列表中)。
答案 1 :(得分:1)
没有循环的解决方案。
FMOD_SYSTEM* sound;
FMOD_SOUND* son;
FMOD_System_Create(&sound);
FMOD_System_Init(sound, 32, FMOD_INIT_NORMAL, NULL);
FMOD_System_CreateSound(sound, "alarm.mp3", FMOD_CREATESAMPLE, 0, &son);
SYSTEMTIME time;
GetSystemTime(&time);
while (!(time.wHour==16 && time.wDayOfWeek==4)) {
Sleep(10000);
GetSystemTime(&time);
}
FMOD_System_PlaySound(sound, son, NULL, 0, NULL);
for (int i = 0; i < 100; i++) {
INPUT ip = { 0 };
ip.type = INPUT_KEYBOARD;
ip.ki.wVk = VK_VOLUME_UP;
SendInput(1, &ip, sizeof(INPUT));
ip.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(1, &ip, sizeof(INPUT));
}