我在R中有两个数据表,如下:
DT_A
具有列sid
、date
、value e1
、value e2
,其中sid
是主键,date
是次要键。
DT_B
有列sid
、date1
、date2
、date3
、......、date12
。这里sid
是主键,因此每一行对应于唯一的sid
,其他列名对应于DT_A
中的辅助键。
我想在< code>DT_A中添加另一列,其中第I行包含表DT_B[sid_i,date_i]中的相应元素
下面是示例代码和所需输出:
require(data.table)
DT_A <- data.table(sid = c(1,2,3,4,5,1,3),
date = c("Jan 2012", "Feb 2012", "April 2012", "May 2012",
"Dec 2012", "Feb 2012", "Oct 2012"),
value1 = rep("1", 7),
value2 = rep("1", 7))
DT_B <- data.table(sid = as.character(c(1,2,3,4,5)),
"Jan 2012" = rep("1", 5),
"Feb 2012" = rep("2", 5),
"March 2012" = rep("3", 5),
"April 2012" = rep("4", 5),
"May 2012" = rep("5", 5),
"June 2012" = rep("6", 5),
"July 2012" = rep("7", 5),
"Aug 2012" = rep("8", 5),
"Sept 2012" = rep("9", 5),
"Oct 2012" = rep("10", 5),
"Nov 2012" = rep("11", 5),
"Dec 2012" = rep("12", 5))
#Set Keys
setkey(DT_A, sid, date)
setkey(DT_B, sid)
#Define Function fun1
fun1 <- function(x){
tryCatch(DT_B[x[1], x[2], with=FALSE], error = function(e) NULL)
}
#Desired Output
DT_A$newCol <- sapply(apply(DT_A, 1, fun1),"[[",1)
DT_A
虽然我当前的方法在这个小例子上有效,但我的实际DT_A有2000万行,这个方法完全挂在那里,我们可以使用data.table
或任何其他方法以更有效的方式进行此操作吗?
熔化第二个<code>数据。表:
library(reshape2)
DT_B.melted = melt(DT_B, id.vars = 'sid', variable.name = 'date')
一旦它融化了,你就可以把两者设置成同一个键,然后做你的join/assign/whatnot:
setkey(DT_B.melted, sid, date)
setkey(DT_A, sid, date)
DT_A[DT_B.melted, newCol := value]
假设我有这样一个数据frame: 我希望创建另一个dataframe,在每行中从左到右显示关系,同时跳过具有空值的列。此外,只有1个有效列记录的行将被排除。例如: 我认为方法应该是编写一个包含此逻辑的UDF,但我不完全确定如何返回一个全新的DF,因为我习惯了UDF只是在同一个DF中创建另一列。或者是否有另一个spark函数可以比创建UDF更容易地处理这种情况?如果有关系,就使用pyspark。
问题内容: 我正在尝试创建一个新表,该表将包含三个现有表中的选定数据。 现有的三个表设置如下,我想要的结果在底部: 在此先感谢您的帮助! 问题答案: 您需要进行三向联接: 演示 或者,如果您已经创建了表,则可以执行以下操作: 要获得多个属性,您必须分别为每个属性将详细信息和分类表联接在一起:
下面是关于中的行操作的一个很好的SO解释 我想到的一个替代方法是为每一行使用一个唯一的< code>id,然后使用< code>by参数应用一个函数。像这样: 问题: > 有没有好的理由不使用这种方法?也许还有其他更有效的选择? 为什么使用< code>by =。我不一样了? < code>dt[,sdd := sd(。SD[,-1,with=FALSE]),by =。I ]
问题内容: 我有这样的数据我想创建一个PySpark数据框 我已经用过 但我总是得到 我如何获得如下所示的结果? 问题答案: 我发现将参数视为元组列表很有用,其中列表中的每个条目对应于DataFrame中的一行,而元组的每个元素对应于一列。 您可以通过将列表中的每个元素设为元组来获得所需的输出: 或者,如果更改源很麻烦,则可以等效地执行以下操作:
刚开始使用熊猫和python。 我有一个工作表,我已经读到一个数据框和应用的正向填充(ffill)方法。 然后我想创建一个包含两个工作表的excel文档。 在应用FFIL方法之前,一个工作表的数据帧中包含数据,而下一个工作表的数据帧应用了FFIL方法。 最终,我打算为数据框的某一列中的每个唯一数据实例创建一个工作表。 然后我想应用一些vba格式的结果-但我不确定哪个dll或插件或东西,我需要调用e
我试图弄清楚如何通过使用与哥伦布()函数并在pySpark中的cp_codeset列()函数中调用udf来动态地为列表中的每个项目创建列(在这种情况下为列表)。下面是我写的代码,但它给了我一个错误。 另一种选择是手动执行它,但在这种情况下,我必须编写相同的udf函数并使用养分()函数调用它75次(这是cp_codeset["col_names"]的大小) 下面是我的两个数据帧,我正在尝试获得结果如