为DataFrame新增布尔列遇维度错误:如何判断列值含尖括号或以<开头?
解决DataFrame新增判断列的维度错误问题
首先,你遇到的「incorrect number of dimensions」错误,大概率是因为你误用了需要二维输入的函数(比如apply)去处理一维的列向量(在R里df$x是向量,并非二维矩阵/数据框),导致维度不匹配。
下面给你两种场景的正确实现方式,以R为例(毕竟这个错误提示是R的典型报错):
场景1:判断值是否以<开头
直接用grepl函数,它会返回和列长度一致的逻辑向量,完美适配新增列的需求:
# 假设你的数据框叫df,目标列是x df$has_angle_bracket <- grepl("^<", df$x)
这里^<是正则表达式,表示字符串的开头是<,grepl会逐个检查x列的每个元素,返回TRUE/FALSE的向量,直接赋值给新列即可。
场景2:判断值是否包含任意尖括号(<或>)
如果你的需求是只要包含<或>就返回TRUE,把正则改成[<>]就行:
df$has_angle_bracket <- grepl("[<>]", df$x)
为什么之前的方法会报错?
举个反例,如果你错误地用了apply(df$x, 1, function(x) grepl("^<", x)),就会触发维度错误——因为df$x是一维向量,而apply的第二个参数1要求输入是二维对象(比如数据框或矩阵),这时候R就会抱怨维度不对。
如果是用Python的pandas,实现逻辑更直观,基本不会出现这类维度问题:
import pandas as pd # 以<开头 df['has_angle_bracket'] = df['x'].str.startswith('<') # 包含任意尖括号 df['has_angle_bracket'] = df['x'].str.contains('[<>]')
内容的提问来源于stack exchange,提问作者rayne
相关产品推荐
相关产品推荐

