当我需要过滤data.frame,即提取满足特定条件的行时,我更喜欢使用该subset
函数:
subset(airquality, Month == 8 & Temp > 90)
Run Code Online (Sandbox Code Playgroud)
而不是[
功能:
airquality[airquality$Month == 8 & airquality$Temp > 90, ]
Run Code Online (Sandbox Code Playgroud)
我偏好有两个主要原因:
我发现代码从左到右读得更好.甚至那些对R一无所知的人也可以说出subset
上面的陈述是做什么的.
因为列可以在select
表达式中称为变量,所以我可以节省一些键击.在我上面的例子中,我只需输入airquality
一次subset
,但只输入三次[
.
所以我过着幸福快乐,subset
随处可见,因为它更短,读起来更好,甚至为我的R编码员提倡它的美丽.但昨天我的世界崩溃了.在阅读subset
文档时,我注意到这一节:
警告
这是一种便于交互使用的便利功能.对于编程,最好使用像[的标准子集函数,特别是参数子集的非标准评估可能会产生意想不到的后果.
有人可以帮助澄清作者的意思吗?
首先,他们的意思是" 交互使用 "?我知道什么是交互式会话,而不是在BATCH模式下运行的脚本,但我不知道它应该有什么区别.
那么,请你解释一下" 论证子集的非标准评估 "以及为什么它是危险的,或许可以提供一个例子?
我有一个大型数据集,我想阅读特定列或删除所有其他列.
data <- read.dta("file.dta")
Run Code Online (Sandbox Code Playgroud)
我选择了我不感兴趣的列:
var.out <- names(data)[!names(data) %in% c("iden", "name", "x_serv", "m_serv")]
Run Code Online (Sandbox Code Playgroud)
而且我想做的事情如下:
for(i in 1:length(var.out)) {
paste("data$", var.out[i], sep="") <- NULL
}
Run Code Online (Sandbox Code Playgroud)
删除所有不需要的列.这是最佳解决方案吗?
我想为一个名为Multiset的类创建不同的方法.
我有所有必需的方法,但我不确定如何编写交集,并集和子集方法.
对于交集和联合,我的代码如下所示:
def intersect(var)
x = Multiset.new
end
Run Code Online (Sandbox Code Playgroud)
这是一个例子:
X = [1, 1, 2, 4]
Y = [1, 2, 2, 2]
Run Code Online (Sandbox Code Playgroud)
然后的交点X
和Y
是[1, 2]
.
我想data.frame
根据逻辑条件从a中过滤行.我们假设我有数据框
expr_value cell_type
1 5.345618 bj fibroblast
2 5.195871 bj fibroblast
3 5.247274 bj fibroblast
4 5.929771 hesc
5 5.873096 hesc
6 5.665857 hesc
7 6.791656 hips
8 7.133673 hips
9 7.574058 hips
10 7.208041 hips
11 7.402100 hips
12 7.167792 hips
13 7.156971 hips
14 7.197543 hips
15 7.035404 hips
16 7.269474 hips
17 6.715059 hips
18 7.434339 hips
19 6.997586 hips
20 7.619770 hips
21 7.490749 hips
Run Code Online (Sandbox Code Playgroud)
我想要的是获得一个看起来相同但只有一个cell_type数据的新数据框.例如包含单元格类型"hesc"的子集/选择行:
expr_value cell_type
1 5.929771 hesc
2 5.873096 hesc …
Run Code Online (Sandbox Code Playgroud) 有关如何检查该列表是否是另一个列表的任何想法?
具体来说,我有
List<double> t1 = new List<double> { 1, 3, 5 };
List<double> t2 = new List<double> { 1, 5 };
Run Code Online (Sandbox Code Playgroud)
如何使用LINQ检查t2是否为t1的子集?
我正在尝试编写一个自定义过滤器方法,它接受任意数量的kwargs并返回一个列表,其中包含类似数据库的列表,其中包含那些kwargs.
例如,假设d1 = {'a':'2', 'b':'3'}
和d2
=同样的事情.d1 == d2
结果是真的.但是假设d2
=同样的事情加上一堆其他的东西.我的方法需要能够判断d2中是否有d1,但Python不能用字典来表示.
语境:
我有一个字类,并且每个对象都有类似的属性word
,definition
,part_of_speech
,等等.我希望能够在这些单词的主列表上调用过滤方法,例如Word.objects.filter(word='jump', part_of_speech='verb-intransitive')
.我无法弄清楚如何同时管理这些键和值.但是,对于其他人来说,这可能会在此背景下具有更大的功
我们有一个CSV文件的数据框.数据框DF
包含包含观察值的列和VaR2
包含测量日期的列().如果未记录日期,则CSV文件包含NA
缺失数据的值.
Var1 Var2
10 2010/01/01
20 NA
30 2010/03/01
Run Code Online (Sandbox Code Playgroud)
我们希望使用subset命令来定义一个新的数据框new_DF
,使其只包含具有NA'
column(VaR2
)值的行.在给出的示例中,只有第2行将包含在新的中DF
.
命令
new_DF<-subset(DF,DF$Var2=="NA")
Run Code Online (Sandbox Code Playgroud)
不起作用,结果数据框没有行条目.
如果在原始CSV文件NA
中交换 了值NULL
,则相同的命令会产生所需的结果:new_DF<-subset(DF,DF$Var2=="NULL")
.
如果字符串NA
在原始CSV文件中提供了值,那么如何使此方法有效?
我有一个像这样的参数列表:
public class parameter
{
public string name {get; set;}
public string paramtype {get; set;}
public string source {get; set;}
}
IEnumerable<Parameter> parameters;
Run Code Online (Sandbox Code Playgroud)
我想要检查它的一系列字符串.
string[] myStrings = new string[] { "one", "two"};
Run Code Online (Sandbox Code Playgroud)
我想迭代参数列表并检查source属性是否等于任何myStrings数组.我可以用嵌套的foreach来做到这一点,但我想学习如何以更好的方式做到这一点,因为我一直在玩linq,就像可枚举的扩展方法一样,所以嵌套的foreachs只是感觉不对.有没有更优雅的首选linq/lambda/delegete方法来做到这一点.
谢谢
当我将矩阵子集化为单个列时,结果是类数字,而不是矩阵(即myMatrix [,5]到第五列的子集).是否有一种紧凑的方法可以将单个列子集化,维护矩阵格式,并维护行/列名称,而无需执行以下操作:
matrix( myMatrix[ , 5 ] , dimnames = list( rownames( myMatrix ) , colnames( myMatrix )[ 5 ] )
Run Code Online (Sandbox Code Playgroud) 我有一个R列表,大约10,000个元素.假设我只想选择元素5,7和9.我不确定如果没有for循环我会怎么做.
我想做一些类似mylist[[c(5,7,9]]
但不起作用的事情.我也试过这个lapply
功能,但也无法让它工作.