让Loop检查是否有任何行具有特定的一组值

时间:2018-11-07 06:18:26

标签: r

我试图运行一个for循环来检查我的行是否包含一组特定的值。我已经知道您可以简单地应用一个函数从数据框中删除该集合,但是我也想知道如何运行for循环。谢谢!

这是我的数据框:

df <- as.data.frame(matrix(NA, nrow = 12, ncol = 3))
df$V1 <- c('1','1','2','3','3','3','4','4','5','5','5','5')
df$V2 <- c('CCC','BBB','AAA','AAA','EEE','BBB','AAA','DDD','EEE','EEE','BBB','CCC')
df$V3 <- c(100,90,80,85,66,98,62,74,56,85,77,66)
colnames(df) <- c('ID','Secondary_ID','Number')

将数据分组,以便每行只有1个唯一ID

library(dplyr)
library(tidyr)
df_2 <- df%>%
  group_by(ID)%>%
  summarise(Key_s = paste0(Secondary_ID, collapse = ','))%>%
  separate(Key_s, into = c('1','2','3','4'))

我知道您可以这样删除特定的集合:

remove_this <- c('BBB','CCC')

df_remove <- apply(df_2, 1, function(x) !any(x %in% remove_this))
final_dataframe <- df_2[df_remove,]

我正在尝试运行一个for循环,该循环将创建另一个称为output的列,并且如果该列包含的特定集合不是“是”,则为“否”。

类似这样的东西:

output <- as.character(nrow(df_2))

for(i in 1:nrow(df_2)){
  if(df_2[i,] %in% remove_this){
    df_2$output <- "Yes"
  }else{df_2$output <- "No"}
}

2 个答案:

答案 0 :(得分:0)

反转测试以查看remove_this的内容是否在行中。

df_2$output <- NA  # initialize the column
for(i in 1:nrow(df_2)){
    df_2$output[i] <- ifelse(all(remove_this %in% df_2[i,]), 'Yes', 'No')
}

答案 1 :(得分:0)

您不需要创建for循环:

import React, {Component} from 'react';
import {Platform, StyleSheet, Text, View, ImageBackground} from 'react-native';

type Props = {};
export default class App extends Component<Props> {
  render() {
    return (
      <View>
      <ImageBackground source={require(./Images/background.jpg)} style={styles.backgroundContainer}>
          <Text> Here Background Image </Text>
      </ImageBackground>
      </View>
    );
  }
}

const styles = StyleSheet.create({
    backgroundContainer: {
    flex: 1,
    width:'100%', 
    height:'100%',
  },
});
remove_this <- c('BBB','CCC')
df_remove <- apply(df_2, 1, function(x) !any(x %in% remove_this))

df_2 %>% 
  mutate(output = c("No", "Yes")[df_remove + 1L])

“技巧”是将# A tibble: 5 x 6 ID `1` `2` `3` `4` output <chr> <chr> <chr> <chr> <chr> <chr> 1 1 CCC BBB NA NA No 2 2 AAA NA NA NA Yes 3 3 AAA EEE BBB NA No 4 4 AAA DDD NA NA Yes 5 5 EEE EEE BBB CCC No 的逻辑值FALSETRUE转换为整数索引,该整数索引用于对向量df_remove进行子集化。