将列值与第一行进行比较并保留 R 中的原始值

     2023-03-12     230

关键词:

【中文标题】将列值与第一行进行比较并保留 R 中的原始值【英文标题】:Compare column values against first row and retain original values in R 【发布时间】:2019-04-19 00:23:44 【问题描述】:

我有一个很大的(当然)光谱数据矩阵,每列代表不同的质量值,而行代表分析中的样本。一个小例子……

mydata <- matrix(c(c(1.95,6,1,0),c(1.76,3,2,14),c(3.67,2,1.55,7),c(0.57,3,8,12),c(2.33,3,16,2)),nrow = 4, ncol = 5)
rnames <- c("threshold", "S1", "S2", "S3")
row.names(mydata)<- rnames

#           [,1]  [,2] [,3]  [,4]  [,5]
# threshold 1.95  1.76 3.67  0.57  2.33
# S1        6.00  3.00 2.00  3.00  3.00
# S2        1.00  2.00 1.55  8.00 16.00
# S3        0.00 14.00 7.00 12.00  2.00

第一行代表一个阈值,要考虑的样本值必须是阈值的 3 倍。我想将第一行值与列中后续行中的所有值进行比较,如果它是 => 3x 第一行值,则返回单元格值,否则将单元格替换为“0”。

因此,对于那个小样本数据,我希望实现的输出矩阵如下所示:

mydata2 <- matrix(c(c(1.95,6,0,0),c(1.76,0,0,14),c(3.67,0,0,0),c(0.57,3,8,12),c(2.33,0,16,0)),nrow = 4, ncol = 5)
row.names(mydata2) <- rnames

#           [,1]  [,2] [,3]  [,4]  [,5]
# threshold 1.95  1.76 3.67  0.57  2.33
# S1        6.00  0.00 0.00  3.00  0.00
# S2        0.00  0.00 0.00  8.00 16.00
# S3        0.00 14.00 0.00 12.00  0.00

我在想有一种方法可以使用apply 来运行它,但我对 R 的了解并没有延伸到那么远(还)。

我应该注意到,阈值(第一行)最初是一个单独的 1xn 矩阵,它是使用InsertRow 插入到第一行的。如果将数据矩阵与“阈值”矩阵进行比较会更容易,而不是比较矩阵内的行,那就更好了。

感谢您帮助解决这个问题!

【问题讨论】:

【参考方案1】:

您可以将矩阵的第一行重复到与其余行相同的大小。然后进行比较,得到一个布尔矩阵。将其与原始值相乘。

mydata[-1, ] <- mydata[-1, ] * (mydata[-1, ] >= 3 * mydata[rep(1, nrow(mydata) - 1), ])

mydata
#           [,1]  [,2] [,3]  [,4]  [,5]
# threshold 1.95  1.76 3.67  0.57  2.33
# S1        6.00  0.00 0.00  3.00  0.00
# S2        0.00  0.00 0.00  8.00 16.00
# S3        0.00 14.00 0.00 12.00  0.00

如果您的阈值存储在单独的矩阵中,则可以使用相同的原理。

【讨论】:

谢谢 Henrik,这是一种快速的方法,我喜欢它可以在不将阈值插入数据矩阵的情况下完成。感谢您的帮助!【参考方案2】:

您绝对可以使用apply,您只需要编写一个函数,其中包含您需要应用于每一列的逻辑。

apply(mydata, 2, function(x) c(x[1], x[-1]*(x[-1] >= 3*x[1])))

>           [,1]  [,2] [,3]  [,4]  [,5]
> threshold 1.95  1.76 3.67  0.57  2.33
> S1        6.00  0.00 0.00  3.00  0.00
> S2        0.00  0.00 0.00  8.00 16.00
> S3        0.00 14.00 0.00 12.00  0.00

【讨论】:

谢谢杰克!让我绊倒的是如何简单地引用第一行;我应该想到 x[1],这一切都清楚了!非常感谢。 非常正确。将您的观察纳入我的回答中。【参考方案3】:

上面的问题已经得到了很好的回答,但是如果将阈值行作为单独的矩阵(或等效向量),这是另一种选择。

threshold <- c(1.95, 1.76, 3.67, 0.57, 2.33)   

假设mydata 是没有threshold 行的原始矩阵:

t(apply(mydata, 1, function(x) ifelse(x < 3*threshold, 0, x)))

#    [,1] [,2] [,3] [,4] [,5]
# S1    6    0    0    3    0
# S2    0    0    0    8   16
# S3    0   14    0   12    0

【讨论】:

【参考方案4】:

sweep 就是为此而生的,而且会很快:

mydata[-1,][sweep(mydata[-1,], 2, mydata[1,], FUN=`/`) < 3] <- 0
mydata

#          [,1]  [,2] [,3]  [,4]  [,5]
#threshold 1.95  1.76 3.67  0.57  2.33
#S1        6.00  0.00 0.00  3.00  0.00
#S2        0.00  0.00 0.00  8.00 16.00
#S3        0.00 14.00 0.00 12.00  0.00

【讨论】:

pyspark 将列值与另一列进行比较包含值范围

】pyspark将列值与另一列进行比较包含值范围【英文标题】:pysparkcomparecolumnvalueswithanothercolumncontainsrangeofvalues【发布时间】:2017-09-0310:39:45【问题描述】:我想将一列的值与具有参考值范围的另一列进行比较。我已尝试使用以下... 查看详情

需要一种更好的方法来将一个列值与同一表行中的多个列值进行比较

】需要一种更好的方法来将一个列值与同一表行中的多个列值进行比较【英文标题】:Needabetterwaytocompareonecolumnvaluetomanycolumnvaluesinthesametablerow【发布时间】:2021-12-1222:38:50【问题描述】:我有一个这样构造的SQL2017数据表:A1235100... 查看详情

熊猫:将列值与另一列中的特定值相加

】熊猫:将列值与另一列中的特定值相加【英文标题】:Pandas:sumcolumnvaluesagainstspecificvalueinanothercolumn【发布时间】:2021-08-3002:59:30【问题描述】:我正在使用这个数据框:InvoiceNoAmountYear-Month11002019-0121252019-0232002019-0243002019-03512020... 查看详情

CodeIgniter 查询:如何将列值移动到同一行中的另一列并将当前时间保存在原始列中?

】CodeIgniter查询:如何将列值移动到同一行中的另一列并将当前时间保存在原始列中?【英文标题】:CodeIgniterquery:Howtomoveacolumnvaluetoanothercolumninthesamerowandsavethecurrenttimeintheoriginalcolumn?【发布时间】:2013-09-1213:44:25【问题描述】:... 查看详情

将包含列表的记录值与 Postgres 中的列值进行比较

】将包含列表的记录值与Postgres中的列值进行比较【英文标题】:ComparearecordvaluecontainingalistwithcolumnvaluesinPostgres【发布时间】:2021-02-0120:50:57【问题描述】:我需要编写一个选择语句,该语句必须使用一个列值将两个表链接在一... 查看详情

TSQL 将列中的逗号分隔值与逗号分隔参数进行比较

】TSQL将列中的逗号分隔值与逗号分隔参数进行比较【英文标题】:TSQLComparecommaseparatedvaluesinacolumnwithacommaseparatedparameter【发布时间】:2017-09-2913:15:00【问题描述】:在我的查询中,我有一个字段Keywords,其中包含一个用分号分隔... 查看详情

ExtJS 4.2网格单元格编辑如何将列值与组合显示值绑定

】ExtJS4.2网格单元格编辑如何将列值与组合显示值绑定【英文标题】:ExtJS4.2gridcelleditinghowtobindcolumnvaluewithcombodisplayvalue【发布时间】:2014-08-1700:39:53【问题描述】:我有一个带有单元编辑插件的网格。我的一个列是int字段,它表... 查看详情

将 DataTable 列值与行过滤器 C# 中的枚举进行比较

】将DataTable列值与行过滤器C#中的枚举进行比较【英文标题】:CompareDataTableColumnValuewithEnuminRowFilterC#【发布时间】:2017-08-0708:05:24【问题描述】:我有一个要使用DataView过滤的数据表。过滤条件基于枚举值和字符串数据表列值。... 查看详情

如果一个列值与第二个 df 列值匹配,我有两个数据框过滤 onmatch 列行

】如果一个列值与第二个df列值匹配,我有两个数据框过滤onmatch列行【英文标题】:Ihavetwodataframesifonecolumnvaluematchesseconddfcolumnvaluesfiltertheonmatchcolumnrows【发布时间】:2018-02-0812:47:40【问题描述】:我这里有两个数据框:df1在这里... 查看详情

数组列值与配置单元中的正常列值之间的比较

】数组列值与配置单元中的正常列值之间的比较【英文标题】:comparisionbetweenarraycolumnvalueswithnormalcolumnvaluesinhive【发布时间】:2015-09-1806:51:25【问题描述】:表1列1列211,2,10211,12,1331,2,14420,1,10511,12,13,14表2列1列21次购买2产品视图10... 查看详情

将某列中某行的值与其他列中的值进行比较

】将某列中某行的值与其他列中的值进行比较【英文标题】:Comparingthevalueofarowinacertaincolumntothevaluesinothercolumns【发布时间】:2018-09-1204:15:35【问题描述】:使用熊猫我正在尝试确定某一行中的值是否大于同一行中所有其他列中... 查看详情

如何在分组值上将一行的值与 PySpark 中的所有其他行进行比较

】如何在分组值上将一行的值与PySpark中的所有其他行进行比较【英文标题】:HowtocomparevalueofonerowwithalltheotherrowsinPySparkongroupedvalues【发布时间】:2021-05-1014:01:08【问题描述】:问题陈述考虑以下数据(见底部的代码生成)+-----+--... 查看详情

将所有列值与 Excel 中的单个单元格进行比较

】将所有列值与Excel中的单个单元格进行比较【英文标题】:CompareallcolumnvaluesagainstindividualcellsinExcel【发布时间】:2019-04-1716:59:45【问题描述】:我想查找C列中的任何行是否与A或B列中的任何单元格匹配,如果匹配,则在相邻单... 查看详情

Python:如何在比较其他列时将列值填充到另一个数据框中的新列?

】Python:如何在比较其他列时将列值填充到另一个数据框中的新列?【英文标题】:Python:Howtopopulateacolumnvaluetonewcolumninanotherdataframeoncomparingothercolumn?【发布时间】:2022-01-1322:47:27【问题描述】:有两个数据框dfStoreSkuFixture11AAProduc... 查看详情

R - 如果列值与字符向量中的任何值匹配,则返回它旁边的列 [重复]

】R-如果列值与字符向量中的任何值匹配,则返回它旁边的列[重复]【英文标题】:R-ifcolumnvaluematchesanyvalueincharactervector,returncolumnbesideit[duplicate]【发布时间】:2018-06-0212:00:16【问题描述】:这里是R的新手,甚至是编码。我在数据... 查看详情

需要将aoh中的一个值与第二个aoh中的另一个值进行比较(代码片段)

编辑更清晰:我将从数据库中获取2个查询并将它们存储为AoH。这2个查询是:selectip_address,testnet,t.emailasemail,owner,hr_manager_loginasmanagerfromlab_viewJOINCMN_INT.AK_EMPLOYEEonowner=loginJOINtestnetstont.name=testnetwhereDIVISIONlike'TERM%'andTERM_DATEisnotnullorderb... 查看详情

如何将列值转换为vba宏中的行

】如何将列值转换为vba宏中的行【英文标题】:HowtoconvertcolumnvaluetorowsinvbaMacro【发布时间】:2020-07-1409:50:09【问题描述】:我有一个包含500个条目并包含20列的excel表。下面是excel表源的一部分。CollegeId|Name|Rollnumber|Department|\'Januar... 查看详情

将列的值与该列 SQL 的平均值进行比较

】将列的值与该列SQL的平均值进行比较【英文标题】:CompareavalueofacolumnwithmeanofthatcolumnSQL【发布时间】:2017-07-2407:20:13【问题描述】:我有一张桌子CREATETABLEt(idINTEGERPRIMARYKEYNOTNULLDEFAULT,countryCHARACTERVARYING(40),cityCHARACTERVARYING(40),popul... 查看详情