ฉันจะนับจำนวนเหตุการณ์ที่เกิดขึ้นของลำดับเฉพาะของตัวเลขภายในคอลัมน์ได้อย่างไร


1

นี่จะแปลกไปหน่อยฉันมีคอลัมน์ 750 แถวที่มีจำนวนเต็มตั้งแต่ 1-10 ฉันพยายามที่จะดูข้อมูลว่าเป็น ชุดลำดับ 3 แถว และ นับ จำนวนการเกิดขึ้นสำหรับแต่ละลำดับตามที่แสดงในภาพหน้าจอต่อไปนี้:

พยายามค้นหาและนับ 3 ลำดับเซลล์ใน excel คอลัมน์ A คือคอลัมน์สังเกตโดยมีค่าจำนวนเต็มตั้งแต่ 1-3 คอลัมน์ I เป็นรายการของลำดับ 3 ค่าที่สังเกตทั้งหมดและคอลัมน์ J คือจำนวนครั้งที่เกิดขึ้นในแต่ละลำดับนั้น

คอลัมน์ A คือคอลัมน์สังเกตที่มีค่าจำนวนเต็มตั้งแต่ 1-3 สำหรับตัวอย่างนี้ คอลัมน์ I เป็นรายการของลำดับ 3 ค่าที่สังเกตทั้งหมดและคอลัมน์ J คือจำนวนครั้งที่เกิดขึ้นในแต่ละลำดับนั้น คอลัมน์ I แสดงเป็นค่าข้อความ แต่จะดีกว่าถ้าให้คอลัมน์หนึ่งเปลี่ยนเป็น 3 คอลัมน์แยกกัน หนึ่งค่าสำหรับแต่ละค่าในลำดับ

ฉันพยายามทำสิ่งนี้เป็นขั้นตอนในการสร้างเมทริกซ์การสังเกตของห่วงโซ่มาร์คอฟอันดับที่ 2 ในรุ่นก่อนหน้าฉันต้องการเมทริกซ์ลำดับแรกเท่านั้นซึ่งประกอบด้วย 2 ค่าลำดับ ฉันทำสิ่งนี้สำเร็จด้วยการสร้าง 100 คอลัมน์; หนึ่งรายการสำหรับทุกชุดที่เป็นไปได้ จากนั้นในทุกแถวของแต่ละคอลัมน์ฉันมีเซลล์ดูค่าที่สังเกต (คอลัมน์ A) สำหรับแถวนั้นและแถวด้านบนและถ้าลำดับตรงกับลำดับสำหรับคอลัมน์นั้นมันจะเอาท์พุท 1 ในที่สุดฉันก็สรุปแต่ละคอลัมน์และใช้ข้อมูลนั้นเพื่อสร้างจำนวนสำหรับเมทริกซ์การสังเกต

ฉันพยายามเขียนสิ่งนี้เป็นกริดขนาดใหญ่ของชุดค่าผสมที่เป็นไปได้ทั้งหมดที่ใช้ในฟังก์ชั่นของเซลล์ 1,000 คอลัมน์ของ 750 แถวก่อให้เกิดปัญหาการคำนวณ มันทำให้ฉันประทับใจว่าอาจมีวิธีง่ายๆในการทำเช่นนี้คือ vba แต่ฉันไม่แน่ใจว่ามันจะเป็นไปได้หรือไม่ ฉันเริ่มสอนตัวเองแล้ว แต่ยังมีอีกมากที่ฉันไม่รู้ มันเป็นไปได้หรือเปล่าหรือฉันจะเสียเวลา?

ฉันต้องการเอาต์พุตสองรายการ: ฉันต้องการรายการลำดับที่สังเกตทั้งหมด จำนวนเต็มอาจอยู่ในช่วง 1-10 แต่ไม่ใช่ทั้งหมด 10 หรืออาจรวมเป็น 10 ทั้งหมด ฉันไม่ต้องการชุดค่าผสมที่ไม่เกิดขึ้น ฉันยังต้องรู้จำนวนครั้งที่สังเกตแต่ละลำดับด้วย

ฉันใช้งานบน Windows 7 PC โดยใช้ Microsoft Excel 1010 ฉันใช้ Microsoft Excel เพราะเป็นโปรแกรมคณิตศาสตร์เดียวที่ฉันมีและเป็นโปรแกรมที่ฉันคุ้นเคยที่สุด


1
+1 สำหรับแสดงภาพ -1 สำหรับการไม่แสดงสิ่งที่คุณได้ลอง ฉันไม่แน่ใจว่าฉันเข้าใจคอลัมน์ E ทำไมคอลัมน์ E ขึ้นต้นด้วย 1-7-8 และไม่ได้อยู่กับ 8-3-4?
Dave

เหตุใดคุณจึงทำสิ่งนี้ใน Excel เลย
Andre Terra

คุณต้องการความช่วยเหลือในการพิจารณาลำดับสามตัวเลขรับรายการลำดับสามหมายเลขที่ไม่ซ้ำกันหรือเพียงแค่นับ
Werrf

@DavidOliver ขออภัยฉันพิมพ์ผิดในความคิดเห็นก่อนหน้าของฉัน นี่คือสิ่งที่ฉันหมายถึง: คุณต้องการสิ่งนี้สำหรับชุดค่าผสมทุกครั้งหรือชุดค่าผสมใดอยู่ในคอลัมน์ E ผลลัพธ์สุดท้ายคืออะไร? คุณจะต้องมีความชัดเจนมากขึ้นกับปัญหาทั้งหมดของคุณ ลดความซับซ้อน ไอเอ็นจี ตัวอย่างของคุณที่จะทำให้คำถามเข้าใจง่ายขึ้นจริงทำให้งงงวยสิ่งที่คุณพยายามบรรลุและซ่อนสมมติฐานที่ไม่ถูกต้อง
Andre Terra

ฉันได้แก้ไขคำถามทั้งหมดเพื่อความชัดเจนและหวังว่าจะทำให้มันง่ายขึ้น ฉันแทนที่กราฟิกด้วยกราฟิกใหม่เพื่อแสดงเวอร์ชันที่ง่ายขึ้น โปรดแจ้งให้เราทราบหากยังมีสิ่งใดที่ไม่ชัดเจน
David Oliver

คำตอบ:


1

คุณไม่ต้องการ Excel สำหรับการเริ่มต้นลอง เครื่องมือวิเคราะห์ ngram ออนไลน์นี้ .

บนฟิลด์ข้อความให้ลองใส่ 8 3 4 3 1 7 8 3 8 3 8. เลือก Using Frequencyและแสดง trigrams ที่เกิดขึ้นอย่างน้อย one ครั้ง

ส่งแล้วคุณจะได้รับรายการของ trigrams พร้อมกับความถี่ของพวกเขา เพียงละเว้นบรรทัดที่มีหนึ่งหรือสองตัวเลขเท่านั้น


หากคุณต้องการพฤติกรรมนี้แบบไดนามิกและเป็นโปรแกรมฉันสามารถช่วยคุณสร้างสคริปต์ที่ใช้การคำนวณนี้อย่างแท้จริงตามการป้อนข้อมูลของผู้ใช้


0

ฉันอดไม่ได้ที่จะหาวิธีแก้ปัญหานี้ ฉันใช้ R แทนเพราะมันสมเหตุสมผลแล้ว รหัสอยู่ด้านล่างและยังมีอยู่ในนี้ R-ซอ

โปรดสังเกตว่ารหัสด้านล่างมีส่วนสำหรับสร้างข้อมูลจำลอง ในทางปฏิบัติคุณจะต้องแทนที่ด้วยข้อมูลจริงของคุณซึ่งจะถูกเก็บไว้ในเวกเตอร์ที่เรียกว่า x ตามที่อธิบายไว้ในรหัส

หากคุณไม่สนใจเกี่ยวกับการสังเกตที่ไม่เกิดขึ้นรหัสนั้นง่ายมาก:

x <- c("01", "02", "03", "01", "02", "03", "01", "02 ", "03") # your Column A
n <- 3 # number of elements in each combination. configurable.

# create a vector with n-sized sequences of characters. (e.g. n = 3 -> "XX-YY-ZZ")
mydata <- x
for (i in 2:n) {
    y <- c(x[-i], x[i])
    mydata <- paste(mydata, y, sep="-")
}

# calculate the frequency of each observation and save into data table
frequencies <- data.frame(table(mydata))
head(frequencies)

ผลลัพธ์จะเป็นดังนี้:

    mydata Freq
1 01-02-02    2
2 01-04-04    2
3 01-05-05    1
4 01-07-07    1
5 01-10-10    1
6 02-02-02    1

หากคุณสนใจที่จะแสดงความเป็นไปได้ทั้งหมดรหัสนั้นค่อนข้างยุ่ง

n <- 3 # number of elements in each combination. configurable.

# -----------------------------------------------------------------------------------#
#            THIS PART SIMPLY GENERATES MOCK DATA. REPLACE WITH ACTUAL DATA          #
# -----------------------------------------------------------------------------------#
universe <- 1:10 # your range of numbers
m <- 100 # number of rows in the mock data

# generate some mock data with a simple m-sized vector of numbers within 'universe'
set.seed(1337) # hardcode random seed so mock data can be reproduced
x <- sample(universe, m, replace=TRUE)
x <- formatC(x, width=nchar(max(universe)), flag=0) # pad our data with 0s as needed
# -----------------------------------------------------------------------------------#
#                               END OF MOCK DATA PART                                #
# -----------------------------------------------------------------------------------#
# At this point, you should have a variable x which contains a sequence of
# numbers stored as characters (text) e.g. "01" "04" "10" "04" "06"

# create a vector with n-sized sequences of characters. (e.g. n = 3 -> "XX-YY-ZZ")
mydata <- x
for (i in 2:n) {
    y <- c(x[-i], x[i])
    mydata <- paste(mydata, y, sep="-")
}

# calculate the frequency of each observation and save into data table
frequencies <- data.frame(table(mydata))

# generate all possible permutations and save them to a data table called
p <- as.matrix(expand.grid(replicate(n, universe, simplify=FALSE)))
p <- formatC(p, width=nchar(max(universe)), flag=0)
q <- apply(p, 1, paste, collapse="-")
permutations <- data.frame(q, stringsAsFactors=FALSE) # broken into separate   step for nicer variable name in df
permutations$Freq <- 0 # fill with zeroes 
permutations$Freq[match(frequencies$mydata, permutations$q)] <- frequencies$Freq

head(permutations)

ผลลัพธ์จะเป็นดังนี้:

         q Freq
1 01-01-01    0
2 02-01-01    0
3 03-01-01    2
4 04-01-01    0
5 05-01-01    1
6 06-01-01    0

0

ใช้คอลัมน์ตัวช่วยที่เชื่อมข้อมูลในกลุ่ม 3 จากนั้น a) ใช้ countif เพื่อนับลำดับ หรือ b) ใช้ตารางเดือย

ในเซลล์ B2 ใส่ =CONCATENATE(A2,",",A3,",",A4) และลากลง (ดับเบิลคลิกที่มุมขวาล่าง)

วิธีการนับ

จากนั้นวาง =COUNTIF(B:B,I2) ใน J2 คุณจะได้รับผลรวมดังต่อไปนี้

countif

ถ้าคุณไม่ชอบ 0 แล้วเพียงแค่ป้อนอัตโนมัติ แม้ว่าฉันจะจินตนาการว่าคุณกำลังใช้ชุดข้อมูลขนาดใหญ่กว่านี้และอาจไม่มีเลย

enter image description here

PivotTable

ขั้นสูงมากขึ้นและ imho โซลูชั่นที่สง่างามมากขึ้นจะใช้เป็นเดือย ใช้สูตรเดียวกันในคอลัมน์ B

แทรก pivottable ตามตารางใน cols A และ B ด้วย "ROW LABELS" เป็นคอลัมน์ B และค่าเป็น COUNT (ไม่ใช่ผลรวม) ของคอลัมน์ B

enter image description here

enter image description here

คุณไม่จำเป็นต้องพิมพ์ลำดับที่จะนับ excel จะพบทุกสิ่งในคอลัมน์ B โดยอัตโนมัติ

นอกจากนี้ยังเป็นวิธีการแก้ปัญหาทั่วไปสำหรับความยาวของลำดับใด ๆ และจำนวนตัวเลขใด ๆ ที่ใช้ (เพียงเพิ่มเซลล์มากขึ้นในการเรียงต่อกันของคุณในคอลัมน์ B) ตัวอย่างเช่นการค้นหาลำดับ 5 หลักในข้อมูล:

1
2
3
4
5
5
4
3
2
1

ทำซ้ำสำหรับ 100 แถวให้:

enter image description here

เค้กชิ้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.