例如,在Pandas中,您始终需要通过字符串中的名称引用DataFrame中的列:
df = pd.DataFrame(list(range(1,10)),columns = ["a"])
df["a"]
但是在R中,包括其某些程序包(例如data.table和dplyr),您可以引用无引号的列,例如:
dt <- data.table(a = 1:10)
dt[,.(a)]
我认为,引用未引用的列名是一场灾难。您获得的唯一好处是,您无需键入""
。但是缺点是无限的:
1)很多时候,您将需要以编程方式选择列。在不使用列名的情况下,您需要在“外部”和“内部”上下文中区分变量。
col_name <- "a"
dt[,..col_name]
2)即使您设法选择字符串向量中指定的列,也很难对其执行(复杂)操作。如this question中所述,您需要采用以下方式:
diststr = "dist"
valstr = "val"
x[get(valstr) < 5, c(diststr) :=
get(diststr)*sum(get(diststr))]
总而言之,我的感觉是,与熊猫相比,R中的数据整理并非一帆风顺/自然。有人可以解释一下这有什么好处吗?
答案 0 :(得分:2)
在熊猫中,您可以引用不带引号的适当命名的列,例如:
df = pd.DataFrame(dict(
a=[1,2,3],
b=[5,6,7],
))
print(df.a)
在R中有效,简洁且类似。
选择取决于代码作者对数据集的了解程度和当时的便利性-对于快速分析而言,这是很好的,对于可重复的工作流而言,这可能很尴尬。
在使用数据库时,我也经常使用无引号的变量访问器-列名基本上总是有效的标识符
df = pd.read_sql('select a, b from foo', dbcon)
df.a
或
df <- dbGetQuery(dbcon, 'select a, b from foo')
df$a
分别是Pandas和R…
每种语言/库都提供工具,取决于您适当地使用它们!