r - R中的while循环内多元素向量与多元素向量比较的替代方法是什么?
问题描述
而 (Data$City!="Mumbai" || Data$City!="Delhi" || Data$City!= "Bengaluru")
错误如下:
在 while (Data$City!="Mumbai" || Data$City!=...: 条件长度 >1 且仅使用第一个元素。
我想在while循环中将列的元素与向量的某些值/元素进行比较,并在其下有条件地执行'n'语句?上述限制的替代方法是什么?有什么替代方法:带有 apply() 或 ifelse 的函数/函数?
DataO <- c("Mumbai","Jaipur","Delhi","Chennai","Bengaluru")
Data1 <- setNames(data.frame(matrix(ncol = 1, nrow = 5), c("City"))
for(i in seq_along(DataO))
{
while (DataO!="Mumbai" || DataO!="Delhi" || DataO!= "Bengaluru")
{
Data1$City[i] <- as.character(DataO[i])
}
}
我想在孟买==孟买(i=1)时执行“while()”下的语句,然后是德里==德里(i=3),然后是班加罗尔==班加罗尔(i=5)。它应该跳过迭代 i=2 和 i=4。
这里只有第一个元素(i=1)被评估和添加(孟买)
> Data1
City
1 Mumbai
2 <NA>
3 <NA>
4 <NA>
5 <NA>
所需的输出:
> Data1
City
1 Mumbai
2 <NA>
3 Delhi
4 <NA>
5 Bengaluru
这里的关键是 ' 而某个地方的某物(元素/行 obs)(数据列/向量)匹配其他地方的某物(元素/行 obs)(数据列/向量)执行语句直到满足条件并迭代它所有后续匹配(并跳出循环)'。
题外话: R 中的行名可以为空(字符类型“”)/是否可以在 R 中分配空行名(字符类型“”)?
解决方案
假设Data$City
是城市名称的向量,并且还假设您要检查给定列表中是否至少有一个城市名称,您可以:
- 将所有有效的城市名称存储到一个字符向量中,即
validCities
. - 在这两个向量之间使用
%in%
运算符以获得逻辑向量。该向量将与第一个向量具有相同的长度,并会说明这些城市中的哪些包含在第二个向量中。 - 使用该
sum
函数验证是否至少有一个阳性,即检查第一个向量中包含的任何城市是否存在于第二个向量中。
下面的例子。
Data <- data.frame(City = c('Chennai', 'Delhi', 'Bhopal', 'Pune', 'Kolkata'));
validCities <- c('Mumbai', 'Delhi', 'Bengaluru');
if (sum(Data$City %in% validCities) > 0) {
// Your code here.
}
更新:
现在您已经提供了所需的输出,我可以看到这很容易。不要停留在以循环为中心的方法上,adata.frame
可以很容易地按行选择和过滤,只需为您要考虑的那些行提供一个条件,并指出您要检索或修改哪些列。
在这种情况下,我选择的那些行CITY
不是提供的三个行之一,并且我正在NA
为该CITY
列分配一个值:
data <- data.frame(CITY = c('Mumbai', 'Jaipur', 'Delhi', 'Chennai', 'Bengaluru'));
data[!(data$CITY %in% c('Mumbai', 'Delhi', 'Bengaluru')), 'CITY'] <- NA;
输出:
> data
CITY
1 Mumbai
2 <NA>
3 Delhi
4 <NA>
5 Bengaluru
此外,您可以简单地删除不需要的行,在这种情况下,其余行将保留其原始行名:
data <- data[data$CITY %in% c('Mumbai', 'Delhi', 'Bengaluru'), , drop = FALSE];
输出:
> data
CITY
1 Mumbai
3 Delhi
5 Bengaluru
推荐阅读
- c++ - 为什么当我尝试将“glfwSetErrorCallback”函数放入 cout 时得到整数输出,该函数返回非整数值?
- asp.net - 如何将 asp.net 重写规则转换为 .net core 重写规则
- java - Spring Boot JPA @AutoWired bean null
- python - 使用计数排序算法对 Python 代码进行 MSD 基数排序
- kotlin - 可以从 Kotlin 使用 Project Loom 吗?
- reactjs - 如何添加 Lodash debounce 以响应输入?
- python - python中的Webproperty查询谷歌搜索控制台
- flutter - 如何解决这个错误我们面临版本错误初始化和所有不支持的包如何解决它
- php - 从 mysql 生成一个 php 数组,并希望使用 db 中的 ID 作为数组键
- c# - C# jsonignore 防止将社会安全号码传递给 API